模板——混合背包
Posted 【Lemon】
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板——混合背包相关的知识,希望对你有一定的参考价值。
http://codevs.cn/problem/3269/
3269 混合背包
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 钻石 Diamond
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int V,n; int w[210],v[210],m[210]; int f[200010]; int main() { scanf("%d%d",&n,&V); for(int i=1;i<=n;i++) scanf("%d%d%d",&w[i],&v[i],&m[i]); for(int i=1;i<=n;i++) { if(m[i]==-1)//完全背包 for(int j=w[i];j<=V;j++) f[j]=max(f[j],f[j-w[i]]+v[i]); else//01与多重背包 { int x=m[i]; for(int k=1;k<=x;k<<=1) { for(int j=V;j>=w[i]*k;j--) f[j]=max(f[j],f[j-w[i]*k]+v[i]*k); x-=k; } if(x) for(int j=V;j>=w[i]*x;j--) f[j]=max(f[j],f[j-w[i]*x]+v[i]*x); } } cout<<f[V]; return 0; }
以上是关于模板——混合背包的主要内容,如果未能解决你的问题,请参考以下文章