int k_count = 0;
long
long k_sum = 1;
while (k_sum < n) //小於且最接近n的2的k次冪的整數
vector
long > arr(k_count, 0); //把相應的零錢存入陣列中
k_sum = 1;
arr[0] = 1;
for (int i = 1; i < k_count; ++i)
要列舉的動態規劃的方法
vector
long> temp(n+1, 0);
vector
long>> dp(k_count, temp);
for (int i = 0; i < k_count; ++i)
dp[i][0] = 1;
dp[0][1] = 1; //因為每種零錢的數量只有兩張
dp[0][2] = 1;
for (int i = 1; i < k_count; ++i)
}}
後來採用優化的動態規劃,發現結果不對
for (int i = 1; i < k_count; ++i)
}}
後來發現問題是,因為零錢的數量是限制的,所以不能採用這種優化的方法,只能通過列舉來實現動態規劃,dp[i][j] = dp[i - 1][j] + dp[i][j-arr[i]]; 這個表示式中已經用了一次 arr[i],而你在用 dp[i][j-arr[i]]時,這個方法中也會用掉 arr[i],所以就會造成結果出錯的情況,如果有無限的零錢的話,那就可以採用優化過的動態規劃演算法。 找零錢問題
問題描述 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾...
找零錢 貪心
現 在有1,2,5,10,20,50,100面值的人名幣若干。你的任務就是用最少的張數來找錢。如需要找23元,我們用一張20,一張2元,一張1元即可。所以3張就是最少的張數。description 輸入多組資料,第一行n n 100 表示有多少組錢需要找,第2 n 1行,輸入要找的錢m m 0 in...
找零錢問題
人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾種表示方法。使用動...