求助!
查看原帖
求助!
334041
沉鸣cmh楼主2020/8/28 21:38

为什么只有50?求找错。

#include<bits/stdc++.h>
using namespace std;
int n,m,a[355],b[125],s1,s2,s3,s4,su[45][45][45][45];
void dj(int x){
	if(x==1)s1++;
	if(x==2)s2++;
	if(x==3)s3++;
	s4++;
}
int dfs(int t1,int t2,int t3,int t4){int th=0;
	if(su[t1][t2][t3][t4])return su[t1][t2][t3][t4];
	int wz=s1-t1+(s2-t2)*2+(s3-t3)*3+(s4-t4)*4+1;if(wz>n)return 0;
	if(t1>0)th=max(th,dfs(t1-1,t2,t3,t4)+a[wz]);
	if(t2>0)th=max(th,dfs(t1,t2-1,t3,t4)+a[wz]);
	if(t3>0)th=max(th,dfs(t1,t2,t3-1,t4)+a[wz]);
	if(t4>0)th=max(th,dfs(t1,t2,t3,t4-1)+a[wz]);
	su[t1][t2][t3][t4]=th;
	return th;
}
int main(){
	cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++){cin>>b[i];dj(b[i]);}
	cout<<dfs(s1,s2,s3,s4);
	return 0;
}
2020/8/28 21:38
加载中...