#P17187. [ICPC 2017 Hong Kong R] Optimal Coin Change

[ICPC 2017 Hong Kong R] Optimal Coin Change

题目描述

在一家十元商店里,所有商品的价格都不超过 1010 美元。为了在收银台更高效地服务顾客,需要以最少的硬币数量提供找零。

在这个问题中,你需要用不同的硬币组合出给定的找零金额。请编写一个程序,计算每种硬币所需的数量。

输入包括一个金额 vv,硬币集合的大小 nn,以及每种硬币的面值 f1,f2,…,fnf_1, f_2, \dots, f_n。输出是一个数列,即 c1,…,cnc_1, \dots, c_n,表示每种硬币所需的数量。找零的方式可能有很多种。金额 vv 是一个满足 0<v≤20000 < v \le 2000 的整数,代表所需的找零金额(以分为单位)。硬币的面值小于或等于 1000010000。你的程序应输出所需硬币总数最少的组合。

例如,由香港金融管理局发行的港币硬币包括 1010 分、2020 分、5050 分、11 元、22 元、55 元和 1010 元,在输入中将表示为 n=7n = 7,f1=10f_1 = 10,f2=20f_2 = 20,f3=50f_3 = 50,f4=100f_4 = 100,f5=200f_5 = 200,f6=500f_6 = 500,f7=1000f_7 = 1000。

输入格式

输入可能包含多个测试用例,请处理到文件末尾。每个测试用例在一行中包含整数 v,n,f1,…,fnv, n, f_1, \dots, f_n。保证 n≤10n \le 10 且 f1<f2<⋯<fnf_1 < f_2 < \dots < f_n。

输出格式

输出为一行 nn 个整数,用空格分隔。如果不存在任何可行的找零方案,你的程序应输出单个 −1-1。如果存在多个可行方案,你的程序应输出使用了更多低面值硬币的那个方案。

2000 7 10 20 50 100 200 500 1000
250 4 10 20 125 150
35 4 10 20 125 150
48 4 1 8 16 20
40 4 1 10 13 37
43 5 1 2 21 40 80
0 0 0 0 0 0 2
0 0 2 0
-1
0 1 0 2  
3 0 0 1
1 1 0 1 0

提示

翻译由 DeepSeek V4 Pro 完成