hdu2844 Coins(DP)
来源:互联网 发布:linux修改apt下载源 编辑:程序博客网 时间:2024/06/11 12:23
思路:多重背包模板
#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;const int MAX=100000;int dp[MAX];int c[MAX],w[MAX];int v;void ZeroOnePack(int cost,int wei)//01{ int i; for(i = v;i>=cost;i--) { dp[i] = max(dp[i],dp[i-cost]+wei); }}void CompletePack(int cost,int wei)//完全{ int i; for(i = cost;i<=v;i++) { dp[i] = max(dp[i],dp[i-cost]+wei); }}void MultiplePack(int cost,int wei,int cnt)//多重{ if(v<=cnt*cost)//如果总容量比这个物品的容量要小,那么这个物品可以直到取完,相当于完全背包 { CompletePack(cost,wei); return ; } else//否则就将多重背包转化为01背包 { int k = 1; while(k<=cnt) { ZeroOnePack(k*cost,k*wei); cnt = cnt-k; k = 2*k; } ZeroOnePack(cnt*cost,cnt*wei); }}int main(){ int n; while(~scanf("%d%d",&n,&v),n+v) { int i; for(i = 0;i<n;i++) scanf("%d",&c[i]); for(i = 0;i<n;i++) scanf("%d",&w[i]); memset(dp,0,sizeof(dp)); for(i = 0;i<n;i++) { MultiplePack(c[i],c[i],w[i]); } int sum = 0; for(i = 1;i<=v;i++) { if(dp[i]==i) { sum++; } } printf("%d\n",sum); } return 0;}
0 0
- hdu2844 Coins(DP)
- hdu2844 Coins(多重背包)
- HDU2844-Coins(多重背包)
- HDU2844 Coins(多重背包)
- HDU2844 Coins
- hdu2844 Coins
- HDU2844:Coins
- hdu2844 Coins
- HDU2844 Coins
- HDU2844:Coins
- hdu2844 Coins
- hdu2844 Coins(多重背包+二进制优化)
- hdu2844—Coins(多重背包)
- hdu2844 Coins(多重背包模板题)
- HDU2844:Coins(多重背包)
- hdu2844 Coins 多重背包
- hdu2844 Coins --多重背包
- 动态规划:HDU2844-Coins(多重背包的二进制优化)
- Cat 部署
- Java入门第二季-学习笔记
- shell浅谈之五文本处理工具Vim
- CocoaPods本地库管理
- Spring mvc注解配置的背后
- hdu2844 Coins(DP)
- 如何修改MySQL字符集
- iOS蓝牙开发(下)一个好用的蓝牙第三方BabyBluetooth
- 微信方法整理1
- size()和length以及length()之间的用法
- java 对于时间转换,时间模板
- ecshop增加调用广告位变大加宽1024方法
- Lucene中文分词以及关键字的高亮
- vb 排序法