poj1742(多重背包分解+01背包二进制优化)
Description
You are to write a program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value A1,A2,A3...An then calculate how many prices(form 1 to m) Tony can pay use these coins.
Input
Output
Sample Input
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0
Sample Output
8
4
题目的意思:
第一行输入,n,m分别表示n种硬币,m表示总钱数。
第二行输入n个硬币的价值,和n个硬币的数量。
输出这些硬币能表示的所有在m之内的硬币种数。 思路:此问题可以转换为01背包和完全背包问题求解,而01背包又可以进行二进制的优化
例:13可由1 2 4 6这四个数字可以组成从1到13所有的数字,并且还不会重复使用,1--->1; 2--->2; 3--->1,2; 4--->4; 5--->1,4; 6--->2,4; 7--->1,6; 8--->2,6; 9--->1,2,6; 10--->4,6; 11--->1,4,6; 12--->2,4,6; 13--->1,2,4,6;
拆分方法:
{
num;数字
k=1;
val;价值
while(k<=num)
{
01beibao(k*val);
num-=k;
k=k*2;
}
01beibao(num);
}
代码:http://blog.csdn.net/vvmame/article/details/76697198
自己的代码:
#include<stdio.h>
#include<string.h>
struct
{
int p;
int nb;
}mp[150];
int dp[100050];//记录该点是否可以有硬币的组成而得到
int lg[100050];//记录每个状态硬币使用次数
int main()
{
int n,m;
int i,j,k,ans;
while(scanf("%d%d",&n,&m)!=EOF&&(m!=0||n!=0))
{
ans=0;
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=n;i++)
scanf("%d",&mp[i].p);
for(i=1;i<=n;i++)
scanf("%d",&mp[i].nb);
for(i=1;i<=n;i++)
{
memset(lg,0,sizeof(lg));
for(j=mp[i].p;j<=m;j++)
{
if(!dp[j]&&dp[j-mp[i].p]&&lg[j-mp[i].p]<mp[i].nb)
{
dp[j]=1;
ans++;
lg[j]=lg[j-mp[i].p]+1;
}
}
}
printf("%d\n",ans);
}
return 0;
}
poj1742(多重背包分解+01背包二进制优化)的更多相关文章
- 背包问题(01背包,完全背包,多重背包(朴素算法&&二进制优化))
写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下 01背包 大家先看一下这道01背包的问题 题目 有m件物品和一个容量为 ...
- CodeCraft-19 and Codeforces Round #537 (Div. 2) D 多重排列 + 反向01背包 + 离线处理
https://codeforces.com/contest/1111/problem/D 多重排列 + 反向01背包 题意: 给你一个字符串(n<=1e5,n为偶数),有q个询问,每次询问两个 ...
- POJ - 1276 二进制优化多重背包为01背包
题意:直接说数据,735是目标值,然后3是后面有三种钱币,四张125的,六张五块的和三张350的. 思路:能够轻易的看出这是一个多重背包问题,735是背包的容量,那些钱币是物品,而且有一定的数量,是多 ...
- hdu1059 多重背包(转换为01背包二进制优化)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1059 之前写过一个多重背包二进制优化的博客,不懂请参考:http://www.cnblog ...
- HDU2191--多重背包(二进制分解+01背包)
悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- HDU 2191(多重背包转换为01背包来做)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 ...
- POJ3211 Washing Clothes[DP 分解 01背包可行性]
Washing Clothes Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9707 Accepted: 3114 ...
- 5. 多重背包问题 II 【用二进制优化】
多重背包问题 II 描述 有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi,价值是 wiwi. 求解将哪些物品装入背包,可使物品体积总和不超过背 ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
随机推荐
- LeetCode--429--N叉树的层序遍历
问题描述: 给定一个N叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 ...
- Confluence 6 配置边栏链接
选择图标来显示或者隐藏,页面(pages),博客页面(blogs),快捷键(shortcuts )或者导航选项(navigation options).例如,如果你希望i的这个公开主要用于博客用途,你 ...
- apicloud 环信总结
点击链接先查看一下apicloud 环信的文档 https://docs.apicloud.com/Client-API/Open-SDK/easeChat 文档中写了很多,但官方给的文档还是有问题, ...
- 漏洞复现——bash远程解析命令执行漏洞
漏洞描述:Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令,在一些cgi脚本中,数据是通过环境变量来传递的,这样就会形成该漏洞 漏洞原理:bash通过以函数名作为环境变量名,以“( ...
- Matlab-11:Gausssidel迭代法工具箱
算法推导: function [u,n]=GaussSeid(A,b,u0,eps,M) %GaussSeid.m为用高斯-塞德尔迭代法求解线性方程组 %A为线性方程组的系数矩阵 %b为线性方程组的常 ...
- 操作远程RabbitMQ
1.连接远程RabbitMQ 访问 http://your ip address:15672 通用帐号为guest,密码为guest:也可以使用自己创建的账号 注:your ip address只你 ...
- 洛谷U36590搬书
题目背景 陈老师喜欢网购书籍,经常一次购它个百八十本,然后拿来倒卖,牟取暴利.前些天,高一的新同学来了,他便像往常一样,兜售他的书,经过一番口舌,同学们决定买他的书,但是陈老师桌上的书有三堆,每一堆都 ...
- Hexo+Github 搭建属于自己的博客(Mac下安装 其他操作系统大同小异)
安装前提 参考博客:http://blog.csdn.net/gdutxiaoxu/article/details/53576018#t5(写的很好,不用看我的了.....) 这篇:http://ww ...
- How can I perform the likelihood ratio, Wald, and Lagrange multiplier (score) test in Stata?
http://www.ats.ucla.edu/stat/stata/faq/nested_tests.htm The likelihood ratio (lr) test, Wald test, ...
- bootstrap 弹框使用
首先需要准备bootstrap.css,bootstrap .js jquery 我这里有写好的下载地址如下: https://pan.baidu.com/s/1miMahXe 秘钥:tgts & ...