DP算法入门(1)——多重背包问题(POJ1276题解)
来源:互联网 发布:知乎 北京 皮肤科 编辑:程序博客网 时间:2024/06/06 09:35
今天照着崔老师的背包问题九讲学习了多重背包问题,收获很大。
在背包问题九讲中,崔老师共给出了三种完全背包问题的解法,我折中选择了中间的那种,即“转化为01背包问题”的解法,背包问题九讲上介绍的非常好,很容易理解,在这里不多说,可遗憾的是文章中没有给出一个完整的代码,在这里贴出,输入输出格式以POJ1276为准:
#include <cstdio>#include <string.h>#include <algorithm>using namespace std;const int VMax=100100,NMax=20000;int V,N,nn,C[NMax],W[NMax],F[VMax];int POW2(int a){ int ret=1; while(a--) ret*=2; return ret;}int main(){ int tmp1,tmp2,k,f; while(scanf("%d",&V)!=EOF) { memset(F,0,sizeof(F)); nn=0; scanf("%d",&N); for(int i=1;i<=N;i++) { scanf("%d%d",&tmp1,&tmp2); k=0; while(1) { if(tmp1-POW2(k+1)+1<=0) break; ++k; } for(int j=0;j<k;j++) { f=POW2(j); ++nn; C[nn]=tmp2*f; W[nn]=tmp2*f; } ++nn; f=tmp1-POW2(k)+1; C[nn]=tmp2*f; W[nn]=tmp2*f; } for(int i=1;i<=nn;i++) for(int j=V;j>=C[i];j--) F[j]=max(F[j],F[j-C[i]]+W[i]); printf("%d\n",F[V]); } return 0;}
- DP算法入门(1)——多重背包问题(POJ1276题解)
- poj1276(DP多重背包)
- poj1276 多重背包问题(二进制解决方案)
- poj1276(多重背包)
- poj1276——Cash Machine(多重背包)
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- DP算法入门(2)——完全背包问题(POJ2063题解)
- poj1276(多重背包模板)
- POJ1276 Cash Machine(多重背包问题)
- 背包问题初步入门--背包2 poj1276
- POJ1276 Cash Machine(多重背包~~)
- poj1276 Cash Machine(多重背包)
- POJ1276 Cash Machine(多重背包)
- poj1276 Cash Machine(多重背包)
- poj1276 多重背包
- 北大POJ1276 多重背包
- jQuery之按钮组件
- hostent结构体
- ARM高效C编程和优化--系统架构,C代码规范
- hdu2845 Beans
- 二叉树的创建与遍历
- DP算法入门(1)——多重背包问题(POJ1276题解)
- PSAPI学习笔记
- ARM高效C编程和优化--编译器,内存和Cache优化以及功耗管理
- 设置linux开机自动运行脚本
- MSSQLServer Binary类型字段 怎么用Delphi读取
- css:导入外部样式表的方法
- Mongoose源码剖析:Introduction and Installation
- Shanghai ** Product Development Plan
- 2010.12.23_天易love_深入浅出VMP爆破