零錢有限制和沒有限制的找零錢問題

2021-08-17 12:21:02 字數 871 閱讀 8398

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結束。輸出該面額有幾種表示方法。使用動...