• 板块学术版
  • 楼主lishitang
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/27 07:49
  • 上次更新2024/11/27 13:55:13
查看原帖
736900
lishitang楼主2024/11/27 07:49

乌龟棋

想问一下MLE是queue问题吗

#include<iostream>
#include<queue>
using namespace std;

const int N=355,M=41;

struct node{
	int a,b,c,d,step;
	int Node(int x,int y,int z,int k,int l){
		a=x;b=y;c=z;d=k;step=l;
		return 0;
	}
};

int n,m,aa[N],b[N],f[400000],cnt[N],z;

queue<node>q;

int jz(int a,int b,int c,int d){
	return d+(c*(cnt[4]+1))+(b*(cnt[4]+1)*(cnt[3]+1))+(a*(cnt[4]+1)*(cnt[3]+1)*(cnt[2]+1));
}

int main(){
	cin>>n>>m;
	
	for(int i=1;i<=n;i++)cin>>aa[i];
	for(int i=1;i<=m;i++){
		cin>>b[i];
		cnt[b[i]]++;
	}
	z=max(cnt[1],cnt[2]);z=max(cnt[3],z);z=max(cnt[4],z);
	q.push({0,0,0,0,1});
	f[0]=aa[1];
	while(!q.empty()){
		node hd=q.front();q.pop();
		int a=hd.a,b=hd.b,c=hd.c,d=hd.d,step=hd.step;
		if(a+1<=cnt[1]){
			f[jz(a+1,b,c,d)]=max(f[jz(a+1,b,c,d)],f[jz(a,b,c,d)]+aa[step+1]);
			q.push({a+1,b,c,d,step+1});
		}
		if(b+1<=cnt[2]){
			f[jz(a,b+1,c,d)]=max(f[jz(a,b+1,c,d)],f[jz(a,b,c,d)]+aa[step+2]);
			q.push({a,b+1,c,d,step+2});
		}
		if(c+1<=cnt[3]){
			f[jz(a,b,c+1,d)]=max(f[jz(a,b,c+1,d)],f[jz(a,b,c,d)]+aa[step+3]);
			q.push({a,b,c+1,d,step+3});
		}
		if(d+1<=cnt[4]){
			f[jz(a,b,c,d+1)]=max(f[jz(a,b,c,d+1)],f[jz(a,b,c,d)]+aa[step+4]);
			q.push({a,b,c,d+1,step+4});
		}
	}
	
	cout<<f[jz(cnt[1],cnt[2],cnt[3],cnt[4])]<<endl;
	return 0;
}
2024/11/27 07:49
加载中...