HDU 6685 Rikka with Coin (枚举 思维)
2019 杭电多校 9 1006
题目链接:HDU 6685
比赛链接:2019 Multi-University Training Contest 9
Problem Description
Rikka hates coins, and she used to never carry any coins with her. These days, Rikka is doing her summer internship abroad. Without mobile payment, Rikka has to face strange prices of commodities, and as a result of always using paper currency, she has to face mountainous coins on here table.
In the local currency system, there are \(4\) kinds of coins: \(10\) cents, \(20\) cents, \(50\) cents and \(1\) dollar. Up to now, Rikka has gained at least \(10^{100}\) coins for each kind.
Now, Rikka is going to have dinner in the canteen, and she decides to pay the bill only with coins. There are \(n\) different combos in the canteen and the price of the \(i\)th is \(w_i\) cents. Rikka would like to choose one combo as dinner but she has not decided to choose which one yet. Therefore, she wants to take some coins so that whichever she chooses, she can always pay the bill without receiving any change.
Since Rikka hates coins, she wants to carry as few coins as possible with her. As it is generally known that Rikka is not good at math, she wants you to help her make the decision.
Input
The first line of the input contains a single integer \(T(1\le T\le 500)\), the number of test cases.
For each test case, the first line contains a single integer \(n(1\le n\le 100)\), the number of combos sold in the canteen.
The second line contains \(n\) positive integers \(w_1,…,w_n(1\le w_i\le 10^9)\), which represents the prices.
Output
For each test case, output a single line with a single integer which represents the minimum number of coins. If there is no valid solution, output \(−1\).
Hint
In the first test case, one optimal solution is to bring one coin of \(10\) cents and two coins of \(20\) cents.
In the second test case, one optimal solution is to bring \(5\) coins of one dollar.
Sample Input
3
5
10 20 30 40 50
5
100 200 300 400 500
1
1
Sample Output
3
5
-1
Solution
题意
给出 \(n\) 种物品的价格,现在要从无限枚 \(10\)元,\(20\)元,\(50\)元,\(100\)元的硬币中选出最少的硬币,满足能购买任何一种物品都不用找零。
题解
显然如果个位不为零时没有可行方案。
接下来考虑可行方案的求解。
\(10\) 分的硬币多只会用一个,如果用了两个,直接替换成一个 \(10\) 分一个 \(20\) 分一定不亏。
\(20\) 分的硬币多只会用三个,如果用了四个,直接替换成一个 \(10\) 分两个 \(20\) 分一个 \(50\) 分一定不亏。
\(50\) 分的硬币多只会用一个,如果用了两个,直接替换成一个 \(50\) 分和一个一元一定不亏。
因此,直接暴力枚举 \(10\), \(20\), \(50\) 的硬币的数量即可,整百的部分用一元硬币填充。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int maxn = 100 + 5;
int w[maxn];
bool judge(int n, int a, int b, int c) {
for(int i = 0; i <= a; ++i) {
for(int j = 0; j <= b; ++j) {
for(int k = 0; k <= c; ++k) {
if(i * 50 + j * 20 + k * 10 == n) {
return true;
}
}
}
}
return false;
}
int main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
int flag = 0;
for(int i = 0; i < n; ++i) {
cin >> w[i];
if(w[i] % 10) {
flag = 1;
}
}
if(flag) {
cout << -1 << endl;
continue;
}
int ans = inf;
for(int j = 0; j <= 1; ++j) {
for(int k = 0; k <= 3; ++k) {
for(int l = 0; l <= 1; ++l) {
int flag = 1;
int cnt = 0;
for(int i = 0; i < n; ++i) {
if(w[i] < 100) {
if(judge(w[i], j, k, l)) {
continue;
} else {
flag = 0;
break;
}
} else {
if(judge(w[i] % 100 + 100, j, k, l)) {
cnt = max(cnt, (w[i] - 100) / 100);
} else if(judge(w[i] % 100, j, k, l)) {
cnt = max(cnt, w[i] / 100);
} else {
flag = 0;
break;
}
}
}
if(flag) {
ans = min(ans, cnt + j + k + l);
}
}
}
}
cout << ans << endl;
}
return 0;
}
HDU 6685 Rikka with Coin (枚举 思维)的更多相关文章
- HDU 6088 - Rikka with Rock-paper-scissors | 2017 Multi-University Training Contest 5
思路和任意模数FFT模板都来自 这里 看了一晚上那篇<再探快速傅里叶变换>还是懵得不行,可能水平还没到- - 只能先存个模板了,这题单模数NTT跑了5.9s,没敢写三模数NTT,可能姿势太 ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
- HDU 5831 Rikka with Parenthesis II(六花与括号II)
31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence
// 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence // 题意:三种操作,1增加值,2开根,3求和 // 思路:这题与HDU 4027 和HDU 5634 ...
- HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5
思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...
- HDU 6093 - Rikka with Number | 2017 Multi-University Training Contest 5
JAVA+大数搞了一遍- - 不是很麻烦- - /* HDU 6093 - Rikka with Number [ 进制转换,康托展开,大数 ] | 2017 Multi-University Tra ...
- B - Rikka with Graph HDU - 5631 (并查集+思维)
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...
- HDU 6090 17多校5 Rikka with Graph(思维简单题)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- HDU 6095 17多校5 Rikka with Competition(思维简单题)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
随机推荐
- HP Server BIOS实验报告
原文链接http://www.hpiss.com/3924.html 注意:红色字体为HP手册中查找到的资源,及个人感觉应该注意的一些信息,个人翻译的也为红字体,网络中自行查找到的资源,以及询问各位师 ...
- IO Processing
Types of IO IRP Buffer Management 首先区分一下page的内存与nonpaged的内存,内存如果用页管理,就难免面对被swap out的命运:但是如果用nonpaged ...
- HDU4578-Transformation-线段树的加、乘、变、次方操作
Sample Input 5 5 3 3 5 7 1 2 4 4 4 1 5 2 2 2 5 8 4 3 5 3 0 0 Sample Output 307 7489 题意:给出n,m,表示该数有n个 ...
- 人工智能-动物识别专家系统算法Python + Pyqt 实现
一.基础知识库 有毛发 哺乳动物 - 有奶 哺乳动物 - 有羽毛 鸟 - 会飞 会下蛋 鸟 - 吃肉 食肉动物 - 有犬齿 有爪 眼盯前方 食肉动物 - 哺乳动物 有蹄 有蹄类动物 - 哺乳动物 反刍 ...
- python_模块 collections,random
collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...
- 【总】.NET Core 2.0 详解
ASP.NET Core 认证与授权[7]:动态授权 雨夜朦胧 2017-11-24 11:21 阅读:7063 评论:19 ASP.NET Core 认证与授权[6]:授权策略是怎么执行的? 雨夜朦 ...
- vue对象侦测
http://blog.csdn.net/yihanzhi/article/details/74200618 数组:this.$set(this.arr,index,value)
- Spring学习笔记(7)——Bean的基本配置
先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就 ...
- Octave的安装
本文是参考吴恩达老师的深度学习视频而做的笔记 深度学习 引言 挑战:AI真正的挑战在于解决那些对人类来说很容易执行,但很难形式化描述的问题,比如识别人们所说的话/图像中的脸/分辨苹果和梨. 解决方案: ...
- 【记录】linux 常用命令梳理
命令梳理 下载文件 [wget 是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具] wget -c [zip路径等] #断点续传,如果下载中断,那么连接恢复时会从上次断点开始下载 ...