社区讨论
求
学术版参与者 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 条回复,欢迎继续交流。
正在加载回复...