POJ 1742 Coins 混合三种背包问题
来源:互联网 发布:怎么查淘宝单号码查询 编辑:程序博客网 时间:2024/05/16 09:35
好吧,这种关于钱币组合类型的题目原来是可以看成背包来做的。。。这一道题目就是可以看成一个混合背包来做。。假若数量乘以价值比m要大的话,那就可以看成是一个完全背包来做。否则的话就是一个多重背包喽。思想倒是很好理解。。而且这里只需要我们判断可行性,只要最后扫一遍1~m看哪些状态是true就可以了。我觉得我的代码没什么好讲的。。。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,num[110],v[110],ans;bool val[100010];void package01(int weigh){ for(int i=m;i>=weigh;--i) val[i]|=val[i-weigh];}void packageComplete(int weigh){ for(int i=weigh;i<=m;++i) val[i]|=val[i-weigh];}void packageMultiple(int nums,int val){ if(nums*val>=m) packageComplete(val); else{ int k=1; while(k<nums){ nums-=k; package01(val*k); k<<=1; } package01(nums*val); }}int main(){ val[0]=true; while(scanf("%d%d",&n,&m)&&n&&m){ for(int i=1;i<=n;++i) scanf("%d",&v[i]); for(int i=1;i<=n;++i) scanf("%d",&num[i]); for(int i=1;i<=n;++i) if(num[i]) packageMultiple(num[i],v[i]); for(int i=1;i<=m;++i) if(val[i])++ans; printf("%d\n",ans);ans=0; memset(val+1,0,sizeof(bool)*m); } return 0;}
0 0
- POJ 1742 Coins 混合三种背包问题
- poj 1742Coins(混合背包)
- poj 1742 coins 背包问题
- poj 1742 Coins(多重背包可行性问题)
- POJ 1742 Coins(背包问题)
- poj 1742 Coins (多重背包可行性问题)
- poj-1742 COINS(多重背包问题)
- poj 1742 Coins【多重背包可行性问题】
- 混合三种背包问题
- POJ 3260 The Fewest Coins / 混合背包
- POJ 1742 Coins (背包)
- poj 1742 Coins (背包)
- poj 1742 Coins(多重背包)
- poj 1742 Coins(多重背包)
- POJ-1742-多重背包-Coins
- POJ 1742 Coins (多重背包)
- Poj 1742 Coins【多重背包】
- POJ 1742 Coins 多重背包
- 1875-畅通工程再续
- 和为s的两个数字
- QMainWindow中添加layout的问题
- PF位的意义
- Java反射机制
- POJ 1742 Coins 混合三种背包问题
- Fragment 布局
- 手机互连(Mobile Connect)简介
- 安全卫士随记
- UOJ 150 [NOIP2015]运输计划
- 2016.10.5总结:
- Go、Nginx、Php、Nodejs谁能胜出紫禁之巅
- 旅行_纪中1281_dp
- 欢迎使用CSDN-markdown编辑器