http://acm.hdu.edu.cn/showproblem.php?pid=2844

题意:有n种纸币面额(a1,a2,...an),每种面额对应有(c1,c2,...cn)张。问这些钱能拼成1-m中多少种值。

题解:背包dp问题。若ci=1,是01背包,若ci*ai>=m则是完全背包,否则是多重背包。(详见《背包九讲》)

先复习一下三种简单背包形式:

 01背包(F[v] ← max{F[v], F[v −Ci] +Wi} ):

 

  

 完全背包(F[i, v] = max(F[i − 1, v], F[i, v −Ci] +Wi)):

  

 多重背包(利用二进制思想转化为01背包):

  

利用三种背包形式就可以轻松解决此题:

  

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std; int f[];
int c[],a[];
int n,m; void ZeroOnePack(int w,int v)
{
for(int j=m;j>=v;j--)
f[j]=max(f[j],f[j-w]+v);
} void CompletePack(int w,int v)
{
for(int j=v;j<=m;j++)
f[j]=max(f[j],f[j-w]+v);
} void MultiplePack(int w,int v,int c)
{
int k=;
while(k<c)
{
ZeroOnePack(k*w,k*v);
c=c-k;k*=;
}
ZeroOnePack(c*w,c*v);
} int main()
{
while(scanf("%d%d",&n,&m)==)
{
memset(f,,sizeof(f));
if(n==) break;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++) scanf("%d",&c[i]);
for(int i=;i<=n;i++){
if(c[i]==)
ZeroOnePack(a[i],a[i]);
else if(c[i]*a[i]>=m)
CompletePack(a[i],a[i]);
else
MultiplePack(a[i],a[i],c[i]);
}
int ans=;
for(int i=;i<=m;i++)
if(f[i]==i) ans++;
printf("%d\n",ans);
}
return ;
}

hdu 2844 混合背包【背包dp】的更多相关文章

  1. HDU 2844 混合背包、

    题意:一个人想买手表,给你n个价值的硬币,然后给你n个价值硬币对应的个数.但是呢,这个人只知道这个手表的价格不超过m元.问他最多能买多少种价值的手表 思路:dp背包专题 但是- - 一直不知道该怎么d ...

  2. hdu 2844 Coins (多重背包+二进制优化)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...

  3. HDU 2844 Coins (多重背包计数 空间换时间)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDu -2844 Coins多重背包

    这道题是典型的多重背包的题目,也是最基础的多重背包的题目 题目大意:给定n和m, 其中n为有多少中钱币, m为背包的容量,让你求出在1 - m 之间有多少种价钱的组合,由于这道题价值和重量相等,所以就 ...

  5. hdu 2844 coins(多重背包 二进制拆分法)

    Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...

  6. HDU - 2844 Coins(多重背包+完全背包)

    题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...

  7. HDU 2844 Coin 多重背包

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. hdu 2844 Coins 多重背包(模板) *

    Coins                                                                             Time Limit: 2000/1 ...

  9. 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)

    作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...

随机推荐

  1. jmeter-监听器介绍与使用

    12.jmeter-监听器介绍与使用 jmeter-监听器介绍与使用 察看结果树 Summary Report 聚合报告 Backend Listener Aggregate Graph 断言结果 C ...

  2. js 打开app应用,如果没有安装就去下载

    废话不多说,直接上代码 var APPCommon = { iphoneSchema: 'XingboTV://', iphoneDownUrl: 'https://itunes.apple.com/ ...

  3. spring源码学习之springMVC(二)

    接着上一篇.继续来看springMVC中最和我们开发中接近的一部分内容: DispatcherServlet的逻辑处理 作者写到在DispatcherServlet类中存在doGet.doPost之类 ...

  4. Django项目:CRM(客户关系管理系统)--47--38PerfectCRM实现全局账号登录注销02

    图片另存为  16*16  名字修改为      global_logo.jpg /*! *bootstrap.js * * Bootstrap v3.3.7 (http://getbootstrap ...

  5. 使用jquery-file-upload实现上传图片时报empty file upload result错误

    原因:后台返回的json格式没有严格按照github中的格式返回 参考:https://groups.google.com/forum/#!topic/jquery-fileupload/0q8PN2 ...

  6. 「LOJ10104」「一本通 3.6 练习 5」Blockade-Tarjan

    首先%%%lydrainbowcat 这个题唔,真是Tarjan好题(?) 不知道为啥也叫BLO,首字母? <题面> 搜索树真真的棒! 仔细看看,知道是Tarjan了,切掉一个点有不通的对 ...

  7. C++ string(STL)

    发现字符串问题中 string 好厉害- string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c ...

  8. jnhs-Myeclipse 10注册教程unable to access jarfile cracker.jar

    直接双击jar文件就可以 打开后,随便写一个名字 然后复制LICENSE_KEY的内容,打开myeclipse 在Code那里粘贴你刚才复制的内容,然后点击Save & Active Now ...

  9. Jboss 默认加载项目访问

    修改JBOSS的server.xml路径为: D:\Program Files\jboss-4.2.2.GA\server\default\deploy\jboss-web.deployer\serv ...

  10. Vue. 之 npm安装 axios

    Vue. 之 npm安装 axios 使用指令: cnpm install axios