HDU - 2844 Coins(多重背包+完全背包)
题意
给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(多重背包+完全背包)相关推荐
- HDU 2844 Coins 多重背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2844 Coins Time Limit: 2000/1000 MS (Java/Others)Mem ...
- HDU 2844 Coins (多重背包)
题目链接 题意:Tony想要买一个东西,他只有n种硬币,每种硬币的面值为a[i],每种硬币的数量为c[i],要买的物品价值不超过m,输出1-m中有多少种价格Tony可以用硬币组合出来. 题解:多重背包 ...
- hdu 1171 dp(多重背包)
View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...
- The Fewest Coins(多重背包+完全背包)
The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...
- 动态规划之背包问题---01背包---完全背包---多重背包
本篇博客是基于Carl大佬的刷题笔记 (代码随想录) 进行总结的 另外加入了我自己的一些整理,特此记录,以防遗忘 几种在面试中常见的背包,其关系如下: 通过这个图,可以很清晰分清这几种常见背包之间的关 ...
- POJ 3260 多重背包+完全背包
前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...
- hdu 2602 Bone Collector(01背包)
题意:给出包裹的大小v,然后给出n块骨头的价值value和体积volume,求出一路下来包裹可以携带骨头最大价值 思路:01背包 1.二维数组(不常用 #include<iostream> ...
- 【BZOJ 1716】 [Usaco2006 Dec]The Fewest Coins 找零钱(背包dp)
题目 Description 农夫John想到镇上买些补给.为了高效地完成任务,他想使硬币的转手次数最少.即使他交付的硬币数与找零得到的的硬币数最少. John想要买T(1<=T<=100 ...
- 动态规划总结(01背包 完全背包 多重背包)
动态规划总结(01背包 完全背包 多重背包) 一.学习资料 1.UVA DP 入门专题 2.夜深人静写算法(二) - 动态规划 3.算法之动态规划 4.什么是动态规划?动态规划的意义是什么? 5.01 ...
最新文章
- PHP自动加载类—__autoload()和spl_autoload_register()
- HttpHandler应用之 防止图片盗链
- ASP.NET Core微服务(四)——【静态vue使用axios解析接口】
- spring导入约束
- Ajax入门总结--jquery实现Ajax
- RabbitMQ(1) - win+rabbitMQ
- 地球人口承载力估计(信息学奥赛一本通-T1005)
- CSS工具之CSS重置(CSS Reset)
- 【基础】基础算法学习笔记(状态空间)
- Linux下配置安装NFS
- Android 博文
- 按不同vlan下发dhcp_【实例】交换机划分vlan,各vlan通过dhcp自动获取ip
- html放大镜原理,js放大镜效果原理
- 操作系统习题(有一个具有两道作业的批处理系统)
- iOS开发:简易天气预报
- Vue联动下拉框默认选中
- 将checkbox选中样式用图片替换
- 密码破解工具John the Ripper使用说明
- sghdg jskadhs khad jlad jlajd
- 旅行照片剪辑--青岛篇