HDU 5527 Too Rich 贪心
题意:
有\(10\)种面值为\(1, 5, 10, 20, 50, 100, 200, 500, 1000, 2000\)的纸币,现在你要选最多的数量凑成\(p\)块钱。
分析:
同样分析问题的反面:设总金额为\(sum\),我们来求凑成\(sum-p\)所需要的最少的张数。那么剩下的就是凑成\(p\)的最多的张数。
如果没有\(50\)和\(500\)的面值的话,那么后一种面值都是前一种面值的倍数,显然贪心是可以的。
贪心的理由就是完全可以用大面值替换掉对应数量的小面值的钱,这样总钱数不变但张数变少了。
考虑到\(50\)和\(500\)的存在,就会出现用大面值凑不成但用小面值能凑成的情况。
所以可以枚举\(50\)和\(500\)分别用了奇数张还是偶数张,然后剩下的\(50\)和\(500\)两张两张地取。
或者看成面值为\(100\)和\(1000\)的对答案贡献为2的纸币。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, a[10], b[10];
int val[] = { 1, 5, 10, 20, 50, 100, 200, 500, 1000, 2000 };
int sum, tot, ans;
//用最少张数的钱去凑n块钱
int solve(int n) {
int ans = 0;
for(int i = 9; i >= 0; i--) {
if(i == 4 || i == 7) { //50和500两张两张地取
int t = min(n / (val[i] * 2), b[i] / 2);
ans += t * 2;
n -= val[i] * 2 * t;
}
else {
int t = min(n / val[i], b[i]);
ans += t;
n -= t * val[i];
}
if(n == 0) break;
}
if(n > 0) return INF;
else return ans;
}
//#define DEBUG
int main()
{
int T; scanf("%d", &T);
while(T--) {
scanf("%d", &n);
sum = 0, tot = 0;
for(int i = 0; i < 10; i++) {
scanf("%d", a + i);
tot += a[i];
sum += val[i] * a[i];
}
if(sum < n) { printf("-1\n"); continue; }
#ifdef DEBUG
printf("sum = %d, tot = %d, cou = %d\n", sum, tot, sum - n);
#endif
n = sum - n;
ans = INF;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++) { //枚举50和500分别取了奇数个还是偶数个
memcpy(b, a, sizeof(a));
int t = n;
if(i) {
if(b[4]) { t -= 50; b[4]--;}
else continue;
}
if(j) {
if(b[7]) { t -= 500; b[7]--; }
else continue;
}
if(t >= 0) ans = min(ans, solve(t) + i + j);
}
if(ans == INF) printf("-1\n");
else printf("%d\n", tot - ans);
}
return 0;
}
HDU 5527 Too Rich 贪心的更多相关文章
- 【算法系列学习】HDU 5527 Too Rich贪心
http://www.cnblogs.com/AOQNRMGYXLMV/p/4934747.html #include<iostream> #include<cstdio> # ...
- HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大 分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...
- HDU 5527 Too Rich
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 4442 Physical Examination(贪心)
HDU 4442 Physical Examination(贪心) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=4442 Descripti ...
- Too Rich HDU - 5527 (贪心+dfs)
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 5527:Too Rich(DFS+贪心)***
题目链接 题意 给出p块钱,现在要用十种硬币凑出,每种硬币有c[i]个,问最多能用多少个硬币. 思路 首先确定,对于每个硬币就是能用小的替换就不用大的. 所以,可以先把硬币尽量用小的替换,如果小的不够 ...
- HDU 5527 贪心
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 5835 Danganronpa (贪心)
Danganronpa 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5835 Description Chisa Yukizome works as ...
随机推荐
- 基本类型包装类、System类、Math类、Arrays类、大数据运算
1 基本类型包装类 Java中想对8种基本数据类型进行复杂操作很困难. 实际程序界面上用户输入的数据都是以字符串类型进行存储的. 程序开发中,需要把字符串转换成指定的基本数据类型. 1.1基本数据类型 ...
- css设置文字超出部分显示省略号。。。
兼容IE/Firefox/Chrome display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
- Kendo UI 特效概述
Kendo UI 特效概述 Kendo UI Fx 提供了一个丰富,可扩展,性能经过优化的工具集合用来完成 HTML 元素的过渡显示.每种特效近可能的使用 CSS Transition ,对于一些老版 ...
- The great pleasure in life is doing what people say you cannot do.
The great pleasure in life is doing what people say you cannot do. 人生最大的快乐是做到别人认为你做不到的事情.
- Redis数据库1
一.启动服务 #进入redis安装文件夹 cd /usr/local/redis/ #开启服务端(后端开启) ./bin/redis-server ./redis.conf #开启客户端 ./bin/ ...
- Android的bitmap和优化
内存管理是个永恒的话题! 内存溢出:就是分配的内存不足以放下数据项序列.如在一个域中输入的数据超过了它的要求就会引发数据溢出问题,多余的数据就可以作为指令在计算机上运行.就是你要求分配的内存超出了系统 ...
- bug {was not declared in this scope}
使用自己定义的结构体作为返回值的时候,出现了 ...was not declared in this scope 检查了各种头文件,把缓存也都删掉了还是不行. 结果,发现,应该这样用vector< ...
- nginx只允许域名访问网址,禁止ip访问
修改nginx配置 文件 在server段里插入如下正则: if ( $host != 'www.baidu.com') { return 403; } 说明:如果访问讨还不是www.baidu.co ...
- C++11 function用法 可调用对象模板类
std::function<datatype()> ()内写参数类型 datatype 代表function的返回值 灵活的用法.. 代码如下 #include <stdio.h&g ...
- Ubuntu 16.04 换国内源
官方渠道,图形界面,操作简单,可以说对新手及其友好!! 依次打开:搜索,软件与更新,第一个和第三个勾上,下载自,其它,然后在中国条目下选择你想使用的镜像站点,然后点“选择服务器”,然乎点击“关闭”,选 ...