请问这个是思路问题还是代码问题
查看原帖
请问这个是思路问题还是代码问题
1064275
kmltz楼主2024/5/9 15:39
using namespace std;
#include<bits/stdc++.h>
#define ll long long
const int N=350;const int D=45;const int M=120; 
ll read(){
   ll summ=0;ll f=1;char ch;
   ch=getchar();
   while(ch<'0'||ch>'9'){
	   if(ch=='-'){
		   f=-1;
	   }
	   ch=getchar();
   
   }
   while(ch>='0'&&ch<='9'){
	   summ=summ*10+ch-'0';
	   ch=getchar();
   
   }
   return f*summ;

}
ll bushu[10];
ll qi[N];
ll f[D][D][D][D];
ll n,m;
ll aaa,bbb,ccc,ddd;
void dfs(ll aa,ll bb,ll cc,ll dd){
	if(aa==aaa & bb==bbb & cc==ccc & dd==ddd){
		return;
	}
	if(aa>aaa||bb>bbb||cc>ccc||dd>ddd){
		return;
	} 
	if(aa<aaa){
		f[aa+1][bb][cc][dd]=max(f[aa+1][bb][cc][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+1]);
		dfs(aa+1,bb,cc,dd);
	}
	if(bb<bbb){
		f[aa][bb+1][cc][dd]=max(f[aa][bb+1][cc][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+2]);
		dfs(aa,bb+1,cc,dd);
	}
	if(cc<ccc){
		f[aa][bb][cc+1][dd]=max(f[aa][bb][cc+1][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+1]);
		dfs(aa,bb,cc+1,dd);
	}
	if(dd<ddd){
		f[aa][bb][cc][dd+1]=max(f[aa][bb+1][cc][dd+1],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+2]);
		dfs(aa,bb,cc,dd+1);
	}
}
int main(){
	n=read();m=read();
	for(int i=1;i<=n;i++){
		qi[i]=read();
	}
	for(int i=1;i<=m;i++){
		ll t=read();
		bushu[t]++;
		
	}
	aaa=bushu[1];bbb=bushu[2];ccc=bushu[3];
	ddd=bushu[4];
	dfs(0,0,0,0);
	cout<<f[aaa][bbb][ccc][ddd];
	return 0;

}

2024/5/9 15:39
加载中...