2017-7-10
[1] 題目描述
給你六種面額1、5、10、20、50、100元的紙幣,假設每種幣值的數量都足夠多,編寫程序求組成N元(N為0~10000的非負整數)的不同組合的個數。
輸入描述:
輸入包括一個整數n(1≤n≤10000)
輸出描述:
輸出一個整數,表示不同的組合方案數。
輸入例子:
1
輸出例子:
1
[2] 題目解析
解: 題目解析
[1] 組合是指若兩個子集的元素完全相同并順序相異,它仍視為同一個組合。
[2] 求解取 i 種面額錢幣填充用戶輸入的總額 n 的最大值。
[3] 聯系經典的問題,即背包問題。
由題意可知:
總額 | 組合方案數 | 組合 |
---|---|---|
1 | 1 | 1張1元 |
2-4 | 1-4 | 1-4 張1元 |
5 | 2 | 5×1元、1×5元 |
6-9 | 2 | (6-9)×1元、1×5元+(1-3)×1元 |
10 | 4 | 1×10元、2×5元、10×1元、1×5元+5×1元 |
20 | 10 | 1×20元、2×10元、4×5元、20×1元、1×10元+2×5元、1×10元+1×5元+5×1元、1×10元+10×1元、3×5元+5×1元、2×5元+10×1元、1×5元+15×1元 |
[3] 解題方案
求解 i 種面額錢幣填充用戶輸入的總額 n 的最大值,即dp[j]=dp[j]+dp[j-coin[i]];
2017-7-10
只有我一個人計算過覺得上面的程序是錯的嗎???
2017-7-11
似乎這樣寫更合理一些!!!