HDU-3591 混合背包
The trouble of Xiaoqian
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2277 Accepted Submission(s): 805Problem DescriptionIn the country of ALPC , Xiaoqian is a very famous mathematician. She is immersed in calculate, and she want to use the minimum number of coins in every shopping. (The numbers of the shopping include the coins she gave the store and the store backed to her.)
And now , Xiaoqian wants to buy T (1 ≤ T ≤ 10,000) cents of supplies. The currency system has N (1 ≤ N ≤ 100) different coins, with values V1, V2, ..., VN (1 ≤ Vi ≤ 120). Xiaoqian is carrying C1 coins of value V1, C2 coins of value V2, ...., and CN coins of value VN (0 ≤ Ci ≤ 10,000). The shopkeeper has an unlimited supply of all the coins, and always makes change in the most efficient manner .But Xiaoqian is a low-pitched girl , she wouldn’t like giving out more than 20000 once.InputThere are several test cases in the input.
Line 1: Two space-separated integers: N and T.
Line 2: N space-separated integers, respectively V1, V2, ..., VN coins (V1, ...VN)
Line 3: N space-separated integers, respectively C1, C2, ..., CN
The end of the input is a double 0.OutputOutput one line for each test case like this ”Case X: Y” : X presents the Xth test case and Y presents the minimum number of coins . If it is impossible to pay and receive exact change, output -1.Sample Input3 705 25 505 2 10 0Sample OutputCase 1: 3
1 #include<iostream>
2 #include<stdio.h>
3 #include<algorithm>
4 #include<string.h>
5 #include<string>
6 #define INF 9999999
7 #include<algorithm>
8 using namespace std;
9 int dp1[20005],dp2[20005];
10 int val[150],num[150];
11 int min(int x,int y)
12 {
13 return x>y? y:x;
14 }
15 int main()
16 {
17 int n,m;
18 int T=1;
19 while(cin>>n>>m)
20 {
21 if(n==0&&m==0) break;
22 for(int i=1;i<=n;i++)
23 cin>>val[i];
24 for(int i=1;i<=n;i++)
25 cin>>num[i];
26 for(int i=1;i<=20000;i++)
27 dp1[i]=dp2[i]=INF;
28 dp1[0]=dp2[0]=0;
29 for(int i=1;i<=n;i++)//多重背包
30 {
31 for(int k=1,flag=0;;k*=2)
32 {
33 if(k*2>num[i])
34 {
35 k=num[i]-k+1;
36 flag=1;
37 }
38 for(int j=20000;j>=k*val[i];j--)
39 {
40 dp1[j]=min(dp1[j],dp1[j-k*val[i]]+k);
41 }
42 if(flag)
43 break;
44 }
45 }
46 for(int i=1;i<=n;i++)//完全背包,这里有两种写法,一种是这种常规的优化了的,还有一种适合新手,虽然复杂度会高些,但是新手理解起来会更容易。
47 {
48 for(int j=val[i];j<=20000;j++)49 dp2[j]=min(dp2[j],dp2[j-val[i]]+1);
50 }
/*
for(int i=1;i<=n;i++){
for(int k=1;k*val[i]<20000;k*=2)//类比于多重背包
{
for(int j=20000;j>=k*val[i];j--)
{
dp2[j]=min(dp2[j],dp2[j-k*val[i]]+k);
}
}
}
*/
51 int lss=INF;
52 for(int i=m;i<=20000;i++)
53 {
54 lss=min(lss,dp1[i]+dp2[i-m]);
55 }
56 if(lss>20000)
57 cout<<"Case "<<T++<<": "<<-1<<endl;
58 else
59 cout<<"Case "<<T++<<": "<<lss<<endl;
60 }
61 return 0;
62 }
HDU-3591 混合背包的更多相关文章
- HDU 3591 (完全背包+二进制优化的多重背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3591 The trouble of Xiaoqian Time Limit: 2000/1000 M ...
- hdu 2844 混合背包【背包dp】
http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意:有n种纸币面额(a1,a2,...an),每种面额对应有(c1,c2,...cn)张.问这些钱能拼成 ...
- HDU 3591 多重背包
给出N种钱币和M 给出N种钱币的面值和个数 NPC拿着这N些钱币去买价值M的物品,能够多付.然后被找零,找零的钱也为这些面值.但没有数量限制 问最少经手的钱币数量 对于NPC做一个付款多重背包 然后对 ...
- HDU 2844 混合背包、
题意:一个人想买手表,给你n个价值的硬币,然后给你n个价值硬币对应的个数.但是呢,这个人只知道这个手表的价格不超过m元.问他最多能买多少种价值的手表 思路:dp背包专题 但是- - 一直不知道该怎么d ...
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)
HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- hdu 3591 The trouble of Xiaoqian
hdu 3591 The trouble of Xiaoqian 题意:xiaoqi要买一个T元的东西,当前的货币有N种,xiaoqi对于每种货币有Ci个:题中定义了最小数量即xiaoqi拿去买东西 ...
- Codevs 3269 混合背包(二进制优化)
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...
随机推荐
- iOS日志获取
IOS日志获取 崩溃日志存放目录: /var/mobile/Library/Logs/CrashReporter
- 【RocketMQ】DLedger模式下的选主流程分析
RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用R ...
- Hosts映射
Hosts映射 思考:如何通过主机名能够找到(ping)某个linux系统? 前言 Hosts:是一个文本文件,用来记录IP和Hostname的映射关系 DNS:是互联网上作为域名和IP地址映射的一个 ...
- 第一次git上传的完整流程
第一次git上传的完整流程 使用git简单命令上传代码push到远程仓库 + 简单介绍了一个.git文件结构. 代码上传到gitee和github流程一样的,不过你上传到github可能网不行失败,所 ...
- 一款Redis可视化工具:ARDM | 京东云技术团队
出众的软件有很多,适合自己的才是最好的. Another Redis Desktop Manager 更快.更好.更稳定的Redis桌面(GUI)管理客户端,兼容Windows.Mac.Linux,性 ...
- 高效数据管理:Java助力实现Excel数据验证
摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在Java中,开发者可以使用一些开源的库(如Apache POI ...
- MySQL快速导入千万条数据(3)
目录 一.测试环境 二.命令行导入方式 三.LOAD DATA导入方式 四.结论 接上文,本次在较高性能的X86物理机上,做真实生产环境的大数据量导入测试. 一.测试环境 ■ CPU是24核,每核2线 ...
- 实战0-1,Java开发者也能看懂的大模型应用开发实践!!!
前言 在前几天的文章<续写AI技术新篇,融汇工程化实践>中,我分享说在RAG领域,很多都是工程上的实践,做AI大模型应用的开发其实Java也能写,那么本文就一个Java开发者的立场,构建实 ...
- Qt OpenGL textures详解
1. 初始化opengl资源 Q_INIT_RESOURCE:textures(资源名称) QSurfaceFormat:定义3d面显示方式 如果在vs+qt vs tools 中无法正常显示3d图形 ...
- Vue之基础事件
1.基础事件,先弹框试试 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...