POJ 1276 Cash Machine <多重背包>
来源:互联网 发布:淘宝如何推广引流 编辑:程序博客网 时间:2024/06/12 05:29
题目:传送门
分析:简单多重背包问题,第一次做此类型问题,看了dd大牛的《背包问题九讲》做的。不得不说这些大牛是真的厉害啊,高中时期就能写出如此清晰透彻的讲解。
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <string>using namespace std;const int MAXV=1e5+5;const int MAXN=12;int n;int dp[MAXV];int m[MAXN],w[MAXN],c[MAXN];int v;void zeroOnePack(int w,int c){ for(int i=v;i>=c;--i){ dp[i]=max(dp[i],dp[i-c]+w); }}void completePack(int w,int c){ for(int i=c;i<=v;++i){ dp[i]=max(dp[i],dp[i-c]+w); }}void multiPack(int w,int c,int m){ if(c*m>=v) completePack(w,c); else{ int k=1; while(k<m){ zeroOnePack(k*w,k*c); m-=k; k<<=1; } zeroOnePack(m*w,m*c); }}int main(){ ios::sync_with_stdio(false); int cash; while(cin>>cash>>n){ v=cash; for(int i=0;i<n;++i){ cin>>m[i]>>w[i]; c[i]=w[i]; } memset(dp,0,sizeof dp); if((!v)||(!n)) cout<<0<<endl; else{ for(int i=0;i<n;++i){ multiPack(w[i],c[i],m[i]); } cout<<dp[v]<<endl; } } return 0;}
阅读全文
0 0
- POJ 1276 Cash Machine(多重背包)
- poj 1276 Cash Machine(多重背包+倍增)
- poj 1276 Cash Machine(多重背包)
- POJ 1276 Cash Machine (多重背包)
- poj 1276 Cash Machine (多重背包)
- poj 1276 Cash Machine----多重背包
- POJ 1276 Cash Machine (多重背包)
- POJ 1276 Cash Machine 多重背包
- 多重背包 poj 1276 Cash Machine
- 【POJ】1276 Cash Machine(多重背包)
- 【DP|多重背包】POJ-1276 Cash Machine
- poj 1276 Cash Machine(多重背包)
- POJ 1276 Cash Machine【多重背包DP】
- poj 1276 Cash Machine (多重背包)
- POJ 1276 Cash Machine(多重背包)
- poj 1276 Cash Machine(多重背包)
- poj 1276 Cash Machine (多重背包)
- poj 1276 Cash Machine (多重背包)
- AtCoder Grand Contest 017-B
- JS-5-prototype、__proto__
- 美团CodeM初赛B轮-黑白树(树形结构贪心)
- 并发编程笔记(一)
- 标准IO重定向到文件非交互式设备时的缓冲策略
- POJ 1276 Cash Machine <多重背包>
- HihoCoder
- C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测
- JS-6-this
- 安装activiti
- linux rm 命令(删除文件和目录)
- Java8 新特性
- Insert Sort
- 安装MYSQL出错:a windows service with the name MYSQL already...service.