多重背包代码
来源:互联网 发布:网络进度计划波浪线 编辑:程序博客网 时间:2024/06/03 08:53
#include <cstdio>#include <algorithm>#include <iostream>using namespace std;const int maxn=10000+10;int dp[maxn],p[maxn],h[maxn],c[maxn];int t,n,m;void ZeroOnePack(int cost,int weight,int exceed){for(int i=exceed;i>=cost;i--){dp[i]=max(dp[i],dp[i-cost]+weight);}}void CompletePack(int cost,int weight,int exceed){for(int i=cost;i<=exceed;i++){dp[i]=max(dp[i],dp[i-cost]+weight);}}//p:价格 h:重量 c:袋数 m:金额 void MultiplePack(){fill(dp,dp+n+1,0);for(int i=1;i<=n;i++){ if(p[i]*c[i]>=m) CompletePack(p[i],h[i],m); else { int k=1; while(k<c[i]) { ZeroOnePack(k*p[i],k*h[i],m); c[i]-=k; k<<=1;}ZeroOnePack(c[i]*p[i],c[i]*h[i],m);}} cout<<dp[m]<<endl;}int main(){ cin>>t; while(t--) { cin>>m>>n; for(int i=1;i<=n;i++) cin>>p[i]>>h[i]>>c[i]; MultiplePack(); }}
0 0
- 多重背包代码
- 01背包,完全背包,多重背包 ,模板代码
- poj 1014 -- 01背包 完全背包 多重背包 代码详解
- 01背包、完全背包、多重背包模板代码
- 背包九讲--多重背包的原理及代码实现
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 多重背包
- 【多重背包】
- 多重背包
- 多重背包
- 后缀自动机 小结
- 分享DCT,DST,Walsh,Hadamard,Haar和Slant图像处理程序
- Android学习中遇到的坑
- Maven常用仓库地址以及手动添加jar包到仓库
- Kafka源码分析之RecordAccumulator
- 多重背包代码
- Android学习之5.X过渡动画的实现
- LeetCode Valid Palindrom
- IF和SWITCH的原理
- 使用 JavaMail 实现邮件发送与收取
- 详解android:scaleType属性
- python中隐式的内存共享
- 安装1.7.1版本PCL开源库
- Struts2源码分析(一)绘制Tomcat启动时时序图并分析