题目描述:

已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生。
求,至少需要几张货币才能完成支付。
如,若支付价格为12元的物品,最少需要一张10元和一张2元,即两张货币就可完成支付。

思路

1. 先用完全背包的思想考虑了一下, 甚至还计算2^40 个 int 相当于多大空间

2. 然后考虑到一个优化, 100 元以上的直接用 100 付就好了嘛, 然后... 这又是道水题

代码

#include <iostream>
#include <stdio.h>
using namespace std;
int money[]; void init() {
money[] = ;
money[] = ;
money[] = ;
money[] = ;
money[] = ;
money[] = ;
money[] = ;
} int main() {
init();
//freopen("testcase.txt", "r", stdin);
int p; while(scanf("%d", &p) != EOF) {
int resVal = ;
for(int i = ; i >= ; i --) {
if(p < money[i]) continue;
resVal += p/money[i];
p = p % money[i];
}
resVal += p;
printf("%d\n", resVal);
}
return ;
}
05-11 21:46