题意

给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值。

分析

对\(c[i]*a[i]>=m\)的币,相当于完全背包;\(c[i]*a[i]<m\)的币则是多重背包,考虑用二进制优化解决。最后扫一遍\(dp[i]\)统计答案。

import java.util.*;
import java.math.*;public class Main{static int MAXN = 100005;static int []dp =  new int[MAXN];static int []a = new int [MAXN];static int []c = new int [MAXN];static int n,m;static void zero(int w,int v) {for(int i=m;i>=w;--i) {dp[i] = Math.max(dp[i], dp[i-w]+v);}}static void complete(int w,int v) {for(int i=w;i<=m;++i) {dp[i] = Math.max(dp[i], dp[i-w]+v);}}static void multiple(int w,int v,int c) {if(c * w >= m) {complete(w,v);return;}int k = 1;while(k<=c) {zero(k*w,k*v);c -= k;k <<= 1;}zero(c*w,c*v);}public static void main(String []args) {Scanner cin =  new Scanner (System.in);while(cin.hasNext()) {n = cin.nextInt();m = cin.nextInt();if(n==0 && m==0) break;for(int i=0;i<=m;++i) dp[i]=-1;dp[0] = 0;for(int i=1;i<=n;++i) {a[i] = cin.nextInt();}for(int i=1;i<=n;++i) {c[i] = cin.nextInt();multiple(a[i],a[i],c[i]);}int res=0;for(int i=1;i<=m;++i) {if(dp[i]==i) {res++;}}System.out.println(res);}cin.close();}
}

转载于:https://www.cnblogs.com/xiuwenli/p/9827669.html

HDU - 2844 Coins(多重背包+完全背包)相关推荐

  1. HDU 2844 Coins 多重背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2844 Coins Time Limit: 2000/1000 MS (Java/Others)Mem ...

  2. HDU 2844 Coins (多重背包)

    题目链接 题意:Tony想要买一个东西,他只有n种硬币,每种硬币的面值为a[i],每种硬币的数量为c[i],要买的物品价值不超过m,输出1-m中有多少种价格Tony可以用硬币组合出来. 题解:多重背包 ...

  3. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  4. The Fewest Coins(多重背包+完全背包)

    The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...

  5. 动态规划之背包问题---01背包---完全背包---多重背包

    本篇博客是基于Carl大佬的刷题笔记 (代码随想录) 进行总结的 另外加入了我自己的一些整理,特此记录,以防遗忘 几种在面试中常见的背包,其关系如下: 通过这个图,可以很清晰分清这几种常见背包之间的关 ...

  6. POJ 3260 多重背包+完全背包

    前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...

  7. hdu 2602 Bone Collector(01背包)

    题意:给出包裹的大小v,然后给出n块骨头的价值value和体积volume,求出一路下来包裹可以携带骨头最大价值 思路:01背包 1.二维数组(不常用 #include<iostream> ...

  8. 【BZOJ 1716】 [Usaco2006 Dec]The Fewest Coins 找零钱(背包dp)

    题目 Description 农夫John想到镇上买些补给.为了高效地完成任务,他想使硬币的转手次数最少.即使他交付的硬币数与找零得到的的硬币数最少. John想要买T(1<=T<=100 ...

  9. 动态规划总结(01背包 完全背包 多重背包)

    动态规划总结(01背包 完全背包 多重背包) 一.学习资料 1.UVA DP 入门专题 2.夜深人静写算法(二) - 动态规划 3.算法之动态规划 4.什么是动态规划?动态规划的意义是什么? 5.01 ...

最新文章

  1. PHP自动加载类—__autoload()和spl_autoload_register()
  2. HttpHandler应用之 防止图片盗链
  3. ASP.NET Core微服务(四)——【静态vue使用axios解析接口】
  4. spring导入约束
  5. Ajax入门总结--jquery实现Ajax
  6. RabbitMQ(1) - win+rabbitMQ
  7. 地球人口承载力估计(信息学奥赛一本通-T1005)
  8. CSS工具之CSS重置(CSS Reset)
  9. 【基础】基础算法学习笔记(状态空间)
  10. Linux下配置安装NFS
  11. Android 博文
  12. 按不同vlan下发dhcp_【实例】交换机划分vlan,各vlan通过dhcp自动获取ip
  13. html放大镜原理,js放大镜效果原理
  14. 操作系统习题(有一个具有两道作业的批处理系统)
  15. iOS开发:简易天气预报
  16. Vue联动下拉框默认选中
  17. 将checkbox选中样式用图片替换
  18. 密码破解工具John the Ripper使用说明
  19. sghdg jskadhs khad jlad jlajd
  20. 旅行照片剪辑--青岛篇

热门文章

  1. 《仙剑奇侠传7》试玩版战斗系统拆解与分析
  2. 剑与远征赏金试炼活动将在13天后结束,工会玩法大家有尝试过吗?
  3. mysql数据备份mysqldump
  4. Oracle 如何修改列的数据类型
  5. 常见的社会潜规则有哪些?
  6. 在虚拟机上为红帽7Linux设置中文输入法
  7. 了解TCP的三次握手和四次挥手
  8. ubuntu 18.04 install gitlab-ce
  9. cookie的设置和获取
  10. 我弥留之际 - 许立志 (珍藏)