80分记搜求助
查看原帖
80分记搜求助
1068343
封禁用户楼主2023/10/7 17:19
#include<bits/stdc++.h>
using namespace std;
int a[355],r[5];
int f[41][41][41][41];
#define _F f[ga][gb][gc][gd]
int dfs(int ga,int gb,int gc,int gd){
	if(ga==gc&&gb==gd&&ga==0){
		_F=a[1];
		return _F;
	}
	if(_F!=0)return _F;
	int t=ga+gb*2+gc*3+gd*4;
	_F=a[t];
	if(ga)_F=max(_F,dfs(ga-1,gb,gc,gd));
	if(gb)_F=max(_F,dfs(ga,gb-1,gc,gd));
	if(gc)_F=max(_F,dfs(ga,gb,gc-1,gd));
	if(gd)_F=max(_F,dfs(ga,gb,gc,gd-1));
	_F+=a[t+1];
	return _F;
}
int main()
{
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	int s;
	for(int i=1;i<=k;i++)
		scanf("%d",&s),r[s]++;
	printf("%d",dfs(r[1],r[2],r[3],r[4]));
	return 0;
}
2023/10/7 17:19
加载中...