[模板练习]混合背包
2016-12-14 16:00
148 查看
这次练习的是背包模板
根据三种情况分别处理
把多重背包转换成01背包处理
一开始写的时候
思路偏了
把多重背包
分成了1×w[i],2×w[i]……p[i]×w[i]
这样的情况
然后再当01背包来写的
结果不用多说了
改回来的时候又忘了改变量名
感觉自己宛如一个智障
根据三种情况分别处理
把多重背包转换成01背包处理
一开始写的时候
思路偏了
把多重背包
分成了1×w[i],2×w[i]……p[i]×w[i]
这样的情况
然后再当01背包来写的
结果不用多说了
改回来的时候又忘了改变量名
感觉自己宛如一个智障
#include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cstring> #include<cmath> #include<string> using namespace std; int m,n,i,j,k,w[40],wd[300],c[40],cd[300],p[40],f[300]; int main() { freopen("mix.in","r",stdin); freopen("mix.out","w",stdout); scanf("%d%d",&m,&n); for(i=1;i<=n;i++) scanf("%d%d%d",&w[i],&c[i],&p[i]); for(i=1;i<=n;i++) { if(p[i]==0) for(j=w[i];j<=m;j++) f[j]=max(f[j],f[j-w[i]]+c[i]); else { if(p[i]==1) for(j=m;j>=w[i];j--) f[j]=max(f[j],f[j-w[i]]+c[i]); else { for(j=1;j<=p[i];j++) for(k=m;k>=w[i];k--) f[k]=max(f[k],f[k-w[i]]+c[i]); } } } printf("%d",f[m]); return 0; }
相关文章推荐
- 混合背包模板(01+多重+完全)
- 【常用模板】 混合背包
- 【模板】混合背包
- 动规-01背包\完全背包\多重背包\混合多重背包模板
- CODE[VS]3269 混合背包 (背包DP模板集合)
- [模板练习]背包的方案数
- 简单背包练习—— 混合背包
- 模板——混合背包
- 背包练习-混合背包 AreYouBusy HDU - 3535
- 混合背包模板
- 背包问题--0/1背包 【模板】
- [codevs3269] 混合背包
- 背包专题练习
- HDU 2844 Coins(多重背包模板题)
- 纹理混合和模板缓冲[翻译]
- 背包问题_模板
- Codevs 3269 混合背包
- 01背包,完全背包,多重背包 ,模板代码
- hdu 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包模板题)
- dp 01背包,完全背包,多重背包 模板