题目描述:
已知有面值为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[10]; void init() { money[0] = 1; money[1] = 2; money[2] = 5; money[3] = 10; money[4] = 20; money[5] = 50; money[6] = 100; } int main() { init(); //freopen("testcase.txt", "r", stdin); int p; while(scanf("%d", &p) != EOF) { int resVal = 0; for(int i = 6; i >= 1; i --) { if(p < money[i]) continue; resVal += p/money[i]; p = p % money[i]; } resVal += p; printf("%d ", resVal); } return 0; }