hdu2844 Coins -----多重背包+二进制优化
题目意思:给出你n种硬币的面额和数量,询问它能够组合成1~m元中的几种情况。
这题如果直接按照完全背包来写的话,会因为每一种硬币的数目1 ≤ Ci ≤ 1000而超时,所以这里需要运用二进制优化来解决问题。
二进制优化和快速幂的思路是一样的。
例如:面值为1的硬币有20枚,如果完全背包的话就需要20次状态转移。
运用二进制优化后,就变成了 面值为1的硬币1枚、面值为2的硬币1枚、面值为4的硬币1枚、面值为8的硬币1枚,最后多出的5个,就直接作为面值为5的硬币一枚,加入新的数组中。之前的20次转移就被优化成了5次。在极限数据1000的情况下优化的更多。
以下为详细代码:
#include<iostream> #include<string.h> using namespace std; int n,m,i,j; int a[100050],c[100050],s[100050],dp[100050]; int ys=0; int main() {while(scanf("%d%d",&n,&m)!=EOF){if(n==0&&m==0) break;ys=0;for(i=0;i<n;i++) scanf("%d",&a[i]);for(i=0;i<n;i++) scanf("%d",&c[i]);for(i=0;i<n;i++){int k=1;int p=c[i];while(p>k){s[ys]=a[i]*k;ys++;p-=k;k*=2;}s[ys++]=a[i]*p;}//for(i=0;i<ys;i++) cout<<s[i]<<" ";cout<<endl;for(i=0;i<=m;i++) dp[i]=0;for(i=0;i<ys;i++)for(j=m;j>=s[i];j--){dp[j]=max(dp[j],dp[j-s[i]]+s[i]);}int ans=0;for(i=1;i<=m;i++) {// cout<<dp[i]<<endl;if(dp[i]==i) ans++;}cout<<ans<<endl;}}
转载于:https://www.cnblogs.com/wsblm/p/10752252.html
hdu2844 Coins -----多重背包+二进制优化相关推荐
- hdu-2844 Coins (混合背包+二进制优化)
HDU链接 文章目录 题目描述: 题意: 题解 (代码) 题目描述: 输入描述: 输出描述: For each test case output the answer on a single line ...
- [多重背包+二进制优化]HDU1059 Dividing
题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...
- hdu2844 Coins(普通的多重背包 + 二进制优化)
看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...
- POJ 1014 Dividing【多重背包+二进制优化】
大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...
- zcmu-1919: kirito(多重背包——二进制优化)
Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...
- HDU 5445 Food Problem 多重背包+二进制优化
据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...
- Dividing(多重背包二进制优化)
题意:有价值为1-6的六种玻璃球,现在告诉你各种玻璃球的个数,问能否将这些玻璃球分成两份,使得两份的总价值相等 既然要等分,那么总价值必定是偶数,所以价值和为奇数是无法等分. 但价值和为偶数时,我们可 ...
- 12.14补卡,多重背包二进制优化
题目链接:22背包专题 [Cloned] - Virtual Judge (vjudge.net) 思路:多重背包的主要思路就是把每一个物品分开放,从而达到每个物品拿与不拿全部遍历到.但是当物品数量过 ...
- ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)
Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 148 Solved: 37 [Submit][S ...
- ZCMU 1919: kirito's 星爆气流斩(多重背包+二进制优化)
1919: kirito's 星爆气流斩 Time Limit: 2 Sec Memory Limit: 128 MB Description 主角kirito是使用世界首款完全潜行游戏" ...
最新文章
- 修改SQL SERVER内置存储过程
- SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
- android ui布局适配,Android适配全面总结(一)----屏幕适配
- python引用其他文件提示找不到模块_Python:为什么导入的模块不能引用另一个导入的模块?...
- 基于Ext JS的模块化应用框架搭建及开发
- 第二十四章:页面导航(六) 1
- 制作好的app需要服务器吗,在直播app制作过程中,服务器是如何配置的?
- 循环char 指针_c 学习笔记 指针
- [nssl1320][jzoj cz 2108] 买装备 {dfs}
- ARM Keil5下载安装并导入STM32芯片
- 【数据分享】1997-2016年全国大部分地级市气温降水数据
- 计算机系科学与技术调研报告,计算机科学与技术专业认识实习调研报告
- 分享 45 个让你提升工作效率的前端工具
- 于的繁体字有几种写法_在繁体字中,“于”、“於”这两个字如何正确使用?...
- 电子邮件群发软件,邮件群发单显是什么意思?外贸群发邮件软件
- Android Wear 2.0首款手表来了;工信部明确增加物联网网号 | IoT黑板报
- Bugku 哥哥的秘密
- 如何在工作中提升自己
- 电脑白屏,电脑白屏怎么办
- 用浏览器收藏夹的书签保存javascript的简单脚本