社区讨论

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m3z41akw
此快照首次捕获于
2024/11/27 07:50
去年
此快照最后确认于
2024/11/27 13:55
去年
查看原帖
想问一下MLE是queue问题吗
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...