在杭电上测试了下 这里的状态转移方程有两个。,。

现在有价值val[1],val[2],…val[n]的n种硬币, 它们的数量分别为num[i]个. 然后给你一个m, 问你区间[1,m]内的所有数目, 由之前n种硬币来构造(即选取某些硬币使得这些硬币的价值和等于[1,m]区间的特定数), 最多能构造出这m个数中的多少个?

初始化: dp为全0,且 dp[0][0]==1.

对于每种硬币, 我们有两种可能的方式处理://重点 多重包的两种转化

1.   Val[i]*num[i]>= m时, 对当前硬币做一次完全背包即可

2.   Val[i]*num[i]<m时, 我们把当前硬币分成下面k+1类:

然后 这里要引入一个多重背包转化为01包的二进制转化法

上图。

对于任意的十进制数 都可以转化为对应的二进制数  在背包问题中使用这个转化 可以有效的减少遍历的次数

然后得说说这道题目的状态转移方程了 dp[j]表示前i个硬币的组合能否构成j这个数 这里得注意 题目问的是1到m能构成的次数 也就是说 dp过程结束以后 还得再遍历一遍 统计最后的结果

#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int
dp[];
int
val[],num[];
int
n,m;
void
compel_pack(int cost)//单层完全包
{

for
(int i=cost;i<=m;i++) dp[i]=max(dp[i],dp[i-cost]);
}

void
one_pack(int cost)//一次01包
{

for
(int i=m;i>=cost;i--) dp[i]=max(dp[i],dp[i-cost]);
}

void
multi_pack(int val,int num)
{

if
(val*num>m) compel_pack(val);
else

{

int
k=;
while
(k<num)//多重背包的01转化 二进制转换 将多重包拆解为多个01包
{
one_pack(k*val);
num-=k;
k*=;
}

if
(num>) one_pack(num*val);
}
}

int
main()
{

while
(cin>>n>>m)
{

if
(n==&&m==) break;
for
(int i=;i<=n;i++) cin>>val[i];
for
(int i=;i<=n;i++) cin>>num[i];
memset(dp,,sizeof(dp));
dp[]=;
for
(int i=;i<=n;i++)
{

multi_pack(val[i],num[i]);
}

int
ans=;
for
(int i=;i<=m;i++)
{

if
(dp[i]) ans++;
}

cout<<ans<<endl;
}

return
;
}

hdu 2844 多重背包的转化问题 以及这个dp状态的确定的更多相关文章

  1. Coins(hdu 2844 多重背包)

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

  2. hdu 2844 多重背包coins

    http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意: 有n个硬币,知道其价值A1.....An.数量C1...Cn.问在1到m价值之间,最多能组成多少种 ...

  3. hdu 2844 多重背包+单调队列优化

    思路:把价值看做体积,而价值的大小还是其本身,那么只需判断1-m中的每个状态最大是否为自己,是就+1: #include<iostream> #include<algorithm&g ...

  4. hdu 2844 多重背包二进制优化

    //http://www.cnblogs.com/devil-91/archive/2012/05/16/2502710.html #include<stdio.h> #define N ...

  5. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  6. Big Event in HDU(HDU 1171 多重背包)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  7. 题解报告:hdu 1171 Big Event in HDU(多重背包)

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  8. hdu 2844 混合背包【背包dp】

    http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意:有n种纸币面额(a1,a2,...an),每种面额对应有(c1,c2,...cn)张.问这些钱能拼成 ...

  9. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

随机推荐

  1. Coherent Calculator

    计算逻辑 输入想要的参数后点击以下按钮进行计算和调整: Formula Bigger N Smaller N Bigger M Smaller M 所以在这个策略中Ft被Fixed在输入的值,其他的三 ...

  2. MacOS系统降级

    从MacOS 10.14 降级到 10.12,下载好系统镜像文件.打开,复制到Application. 准备一个至少8G的U盘,,打开磁盘工具,『抹掉』(格式化)成Mac OS扩展(日志式),名称可随 ...

  3. 阶段5 3.微服务项目【学成在线】_day18 用户授权_09-动态查询用户的权限-认证服务查询用户权限

    认证服务查询用户权限 如果权限为空就New一个对象出来. 因为如果为空的话 下面 forEach就会报空指针的异常 启动服务测试 重新登陆 看到userExt已经获取到了用户的权限 权限的字符串 复制 ...

  4. CentOS7下搭建zabbix监控(三)——Zabbix监控服务配置

    CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置 (1).配置Zabbix监控Apache服务 主机名:yo ...

  5. PAT 甲级 1031 Hello World for U (20 分)(一开始没看懂题意)

    1031 Hello World for U (20 分)   Given any string of N (≥) characters, you are asked to form the char ...

  6. 如何让在panel里的子窗体随panel的大小改变而变化?(转)

            private void Form1_Load(object sender, EventArgs e)         {             frm=new Form2();   ...

  7. tk.mybatis 报错:tk.mybatis.mapper.MapperException: tk.mybatis.mapper.MapperException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'apiLogMapper ...

  8. demo rabbitmq topic(主题模式),fanout(广播模式),轮询分发,确认接收Ack处理

    //durable = true 代表持久化 交换机和队列都要为true ,持久代表服务重启,没有处理的消息依然存在 //topic 根据不同的routkey 发送和接收信息 //fanout 广播模 ...

  9. Spring 分布式事务详解

    在学习分布式事务的过程中会遇到以下关键名词: 相关名词: XA :XA规范的目的是允许多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效.X ...

  10. C/C++语言,自学资源,滚动更新中……

    以下教学视频中,缺少对“字符串”技术的讨论,大家注意看书. 一维数组,及其举例:(第四版)P77~P85,书上这部分内容写的很好,很详细,尤其是这里列出来的每一个例子都要仔细去看一看,对你会很有帮助. ...