题目意思:给出你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 -----多重背包+二进制优化相关推荐

  1. hdu-2844 Coins (混合背包+二进制优化)

    HDU链接 文章目录 题目描述: 题意: 题解 (代码) 题目描述: 输入描述: 输出描述: For each test case output the answer on a single line ...

  2. [多重背包+二进制优化]HDU1059 Dividing

    题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...

  3. hdu2844 Coins(普通的多重背包 + 二进制优化)

    看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...

  4. POJ 1014 Dividing【多重背包+二进制优化】

    大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...

  5. zcmu-1919: kirito(多重背包——二进制优化)

    Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...

  6. HDU 5445 Food Problem 多重背包+二进制优化

    据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...

  7. Dividing(多重背包二进制优化)

    题意:有价值为1-6的六种玻璃球,现在告诉你各种玻璃球的个数,问能否将这些玻璃球分成两份,使得两份的总价值相等 既然要等分,那么总价值必定是偶数,所以价值和为奇数是无法等分. 但价值和为偶数时,我们可 ...

  8. 12.14补卡,多重背包二进制优化

    题目链接:22背包专题 [Cloned] - Virtual Judge (vjudge.net) 思路:多重背包的主要思路就是把每一个物品分开放,从而达到每个物品拿与不拿全部遍历到.但是当物品数量过 ...

  9. ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)

    Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 148  Solved: 37 [Submit][S ...

  10. ZCMU 1919: kirito's 星爆气流斩(多重背包+二进制优化)

    1919: kirito's 星爆气流斩 Time Limit: 2 Sec  Memory Limit: 128 MB Description 主角kirito是使用世界首款完全潜行游戏" ...

最新文章

  1. 修改SQL SERVER内置存储过程
  2. SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
  3. android ui布局适配,Android适配全面总结(一)----屏幕适配
  4. python引用其他文件提示找不到模块_Python:为什么导入的模块不能引用另一个导入的模块?...
  5. 基于Ext JS的模块化应用框架搭建及开发
  6. 第二十四章:页面导航(六) 1
  7. 制作好的app需要服务器吗,在直播app制作过程中,服务器是如何配置的?
  8. 循环char 指针_c 学习笔记 指针
  9. [nssl1320][jzoj cz 2108] 买装备 {dfs}
  10. ARM Keil5下载安装并导入STM32芯片
  11. 【数据分享】1997-2016年全国大部分地级市气温降水数据
  12. 计算机系科学与技术调研报告,计算机科学与技术专业认识实习调研报告
  13. 分享 45 个让你提升工作效率的前端工具
  14. 于的繁体字有几种写法_在繁体字中,“于”、“於”这两个字如何正确使用?...
  15. 电子邮件群发软件,邮件群发单显是什么意思?外贸群发邮件软件
  16. Android Wear 2.0首款手表来了;工信部明确增加物联网网号 | IoT黑板报
  17. Bugku 哥哥的秘密
  18. 如何在工作中提升自己
  19. 电脑白屏,电脑白屏怎么办
  20. 用浏览器收藏夹的书签保存javascript的简单脚本

热门文章

  1. ubuntu 的重要一课
  2. Apache Oozie Installation
  3. ListView中动态显示和隐藏HeaderFooter
  4. mac 安装 cocoapods
  5. javascript设置首页,加入收藏
  6. 如何做一个让开发人员看得起的软件测试人员
  7. Linux Server - NIS
  8. win10 默认程序 edge
  9. 为什么 Redis 单线程能达到百万+QPS?
  10. Spring MVC 中集成 Apache Shiro 安全框架