【水】背包问题的POJ例题
来源:互联网 发布:ubuntu 16.10 更新源 编辑:程序博客网 时间:2024/06/06 10:46
1 0-1背包问题
本来想做成一个七八个题的进阶集合,结果后面随着难度进阶个人认为不能单独归类为背包问题了,故此此篇比较水,就是在单纯介绍0-1背包问题
POJ 3624
题解:非常基础的模板题,套用0-1背包公式即可。
还是放上代码:
#include <iostream>#include <cstring>using namespace std;int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){int value[n+2],weight[n+2];for(int i=0;i<n;i++){cin>>weight[i]>>value[i];}int f[m+2];memset(f,0,sizeof(f));for(int i=0;i<n;i++){for(int j=m;j>=weight[i];j--){f[j]=max(f[j-weight[i]]+value[i],f[j]);}}cout<<f[m]<<endl;}}
POJ 3628
题意:给n个数,和一个数m,求n个数中的部分组成的和,与m的最小差(和必须大于等于m)
题解:没有给总容量需要输入过程中自己计算。其余还是常规0-1背包问题。物品的价值和重量此时可看做一个。
代码:
#include <iostream>#include <cstring>using namespace std;int main(){int n,b;while(cin>>n>>b){int weight[n+2];memset(weight,0,sizeof(weight));int sum=0;for(int i=0;i<n;i++){cin>>weight[i];sum+=weight[i];}int f[sum+2];memset(f,0,sizeof(f));for(int i=0;i<n;i++){ for(int j=sum;j>=weight[i];j--){ f[j]=max(f[j],f[j-weight[i]]+weight[i]); } } int ans; for(int i=1;i<=sum;i++){ if(f[i]>=b){ ans=f[i]-b;break; } } cout<<ans<<endl;}}
阅读全文
0 0
- 【水】背包问题的POJ例题
- 01背包问题-采药例题
- 三种背包问题的例题(各一道)
- 1 0 背包问题 典型的 例题 : Bone Collector
- 背包问题之两个例题:Inflate & Building
- [背包] poj 3624 最基本的背包问题
- POJ charm bracelet 背包问题的理解
- poj 3459(背包问题)
- Poj-3624 背包问题
- 2-sat 问题 总结 例题poj 3683
- 区间覆盖问题 例题 POJ 2376
- POJ 1276-CashMachine 背包问题
- 经典背包问题 POJ 3624
- 01背包问题 poj 3624
- poj 1742 coins 背包问题
- poj 1384 完全背包问题
- POJ 3624 01背包问题
- POJ 1384 完全背包问题
- 支付宝现金红包,支付宝双十一大礼包,攻略
- 【分治法】折半查找及C++代码实现
- 动态规划总结
- Linux安装JDK
- log4j.properties 详解与配置步骤
- 【水】背包问题的POJ例题
- P3696,玄妙的贪心题
- Android自定义标题+画圆+进度条
- POJ2778 DNA Sequence(AC自动机+矩阵快速幂)
- Java NIO:浅析I/O模型
- Android自带的toolbox分析及扩展
- 【poj 1502】 MPI Maelstrom 【East Central North America 1996】
- Travel HDU
- Can't create handler inside thread that has not called Looper.prepare()