概述
/* 要求每个最优 即累加前k优解 注意不用去重 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 210 #define maxm 5010 #define maxk 60 using namespace std; int n,m,k,w[maxn],v[maxn],f[maxm][maxk]; int x[maxk],y[maxk],a,b,z,ans; int init() { int x=0;bool f=0;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} if(f)return -x; return x; } int main() { //freopen("bags.in","r",stdin); //freopen("bags.out","w",stdout); k=init();m=init();n=init(); for(int i=1;i<=n;i++) w[i]=init(),v[i]=init(); memset(f,128,sizeof(f)); f[0][1]=0; for(int i=1;i<=n;i++) { for(int j=m;j>=w[i];j--) { for(int l=1;l<=k;l++) { x[l]=f[j][l]; y[l]=f[j-w[i]][l]+v[i]; } a=b=z=1; x[k+1]=y[k+1]=-1; while(z<=k&&(x[a]!=-1||y[b]!=-1)) { if(x[a]>y[b])f[j][z]=x[a],a++; else f[j][z]=y[b],b++; z++; } } } for(int i=1;i<=k;i++) ans+=f[m][i]; printf("%dn",ans); return 0; }
转载于:https://www.cnblogs.com/yanlifneg/p/5562668.html
最后
以上就是单薄月饼为你收集整理的cogs 53 多人背包的全部内容,希望文章能够帮你解决cogs 53 多人背包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复