#P2581. Exact Change Only

Exact Change Only

中文题面:

描述

布德罗伸手过去,摇醒了在新墨西哥某处打瞌睡的蒂博多。

“我们在哪儿?”

蒂博多迷迷糊糊地打着哈欠问道。

“肯定不在拉斯维加斯,我敢打包票,但你能把我背包拿过来吗?”

布德罗指着他们那辆樱桃红色福特米亚塔后座上那个磨损的皮质背包说。

“怎么了,出问题了吗?”

“先把我的背包给我,不管有没有问题。”

蒂博多照做了,就在布德罗把车在一排靠近收费站的车辆中缓缓停下时,他抬头看了一眼。

1.651.65美元——仅限精确找零”,蒂博多读着一座小木屋前黄色标志牌上的字,木屋里只有一名收费员。

“我得有1.651.65美元的精确零钱?”蒂博多一边翻找背包一边问,“我就只有十个2525美分硬币、四个1010美分硬币和三个11美分硬币。我没有55美分硬币……”

“那就给我五个2525美分硬币和四个1010美分硬币吧。”

布德罗伸出手说。

“哦,对哦。”蒂博多说着递过硬币,“确实能凑成1.651.65美元。

真希望能有个简单的方法来判断给定一堆硬币时,是否能凑出某个确切金额。

“嗯哼。”布德罗耸耸肩,“听起来像是个不错的编程问题。”

输入

这个问题的输入将由一系列(非空)数据集组成,最多可包含100100个数据集。

每个数据集将按照以下描述格式化,且各数据集之间没有空行分隔。

一个数据集包含11个部分:

起始行的单行内容: ABCDEA B C D E 其中:

AA: (0.01<=A<=5.00)(0.01 <= A <= 5.00) 是一个保留两位小数的货币金额。

BB: (0<=B<=100)(0 <= B <= 100) 是四舍五入到整数的2525美分硬币数量 (一枚25美分硬币= 0.250.25美元)

CC: (0<=C<=100)(0 <= C <= 100) 是四舍五入到整数的1010美分硬币数量 (一枚1010美分硬币= 0.100.10美元)

DD: (0<=D<=100)(0 <= D <= 100) 是四舍五入到整数的55美分硬币数量(一枚55美分硬币= 0.050.05美元)

EE: (0<=E<=100)(0 <= E <= 100) 是四舍五入到整数的11美分硬币数量 (一枚11美分硬币= 0.010.01美元)

输出

对于每个数据集,将恰好输出一行结果。

如果存在一个或多个给定硬币子集的值恰好能加起来等于给定的货币金额,则输出格式为: ABCDA B C D

其中

AA2525美分硬币的数量

BB1010美分硬币的数量

CC55美分硬币的数量

DD11美分硬币的数量对应于所需硬币数量最少的子集。

否则,输出将为一行内容:“NO EXACT CHANGE”

输入数据1

0.45 2 1 1 4
0.75 3 7 1 75

输出数据1

NO EXACT CHANGE
3 0 0 0

来源

2003年美国南中央地区大学生程序设计竞赛