D. Exact Change
[link](Problem - D - Codeforces)
题意
给你一些数,你有
1
元
、
2
元
、
三
元
1元、2元、三元
1元、2元、三元三种硬币,问你最少带多少个硬币可以将这些数都可以分别凑出来。
思路
贪心的来看我们能多用
3
3
3就多用
3
3
3,
3
的
余
数
最
多
有
0
,
1
,
2
3的余数最多有0,1,2
3的余数最多有0,1,2,也就是我们最多带再带
一
个
1
,
一
个
2
一个1,一个2
一个1,一个2就能把所有的都拼出来,所以上界为
m
a
x
n
u
m
/
3
+
2
maxnum / 3 + 2
maxnum/3+2。但有的时候并不需要
1
或
2
1或2
1或2,还有的时候可以少带一个
3
3
3将一个余数为
1
1
1的转化为用两个
2
2
2拼出,例如
10
,
8
10,8
10,8最优解因该是
3
,
3
,
2
,
2
3,3,2,2
3,3,2,2四个硬币即可。
发现贪心下界分类讨论不是很方便,但是经过刚才分析,我们发现,最多用一个
1
1
1,最多用两个
2
2
2,因此我们暴力的枚举用多少个
1
和
2
1和2
1和2,然后枚举每一个数判断一下当前用了这些
1
,
2
1,2
1,2后还需要多少个
3
3
3即可,注意一定是可以凑出的情况我们才比较,如果凑不出即当前选法无解置成正无穷即可。
Code
#include
#include
#include
#include
#include
#include
#include
#include