90分求调
查看原帖
90分求调
1127476
death_fish楼主2025/6/25 21:33

90分求调

#include <bits/stdc++.h>




using namespace std;

int n,m,s[109],f[9];
int dp[109][109][109][109];

int summ(int a,int b,int c,int d)
{
	return 1+a+b*2+c*3+d*4; 
}


int main()
{
	
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>s[i];
	for(int i=1;i<=m;i++)
	{
		int g;
		cin>>g;
		f[g]++;
	}
	
	//for(int i=1;i<=4;i++) cout<<f[i]<<' '<<endl;
	
	dp[0][0][0][0]=s[1];
	
	for(int a=0;a<=f[1];a++)
	{
		for(int b=0;b<=f[2];b++)
		{
			for(int c=0;c<=f[3];c++)
			{
				for(int d=0;d<=f[4];d++)
				{
					int r=summ(a,b,c,d);
					if(a!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a-1][b][c][d]+s[r]);
					if(b!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b-1][c][d]+s[r]);
					if(c!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c-1][d]+s[r]);
					if(d!=0) dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c][d-1]+s[r]);
				}
			}
		}
	}
	
	/*for(int a=0;a<=f[1];a++)
	{
		for(int b=0;b<=f[2];b++)
		{
			for(int c=0;c<=f[3];c++)
			{
				for(int d=0;d<=f[4];d++)
				{
					cout<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<dp[a][b][c][d]<<endl;
				}
			}
		}
	}*/
	
	cout<<dp[f[1]][f[2]][f[3]][f[4]];
	
	
	return 0;
} 
2025/6/25 21:33
加载中...