最少貨幣數問題

2021-08-10 10:23:04 字數 755 閱讀 9014

給定陣列arr, arr中所有的值都為正數且不重複。每個值代表一中面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求組成aim的最少貨幣數。

採用動態規劃的思想來解此題。首先設定dp[i][j]陣列,i的意思是當前的最大貨幣數,j的意思是目標貨幣數。因此dp[i][j]的意思就是使用最大貨幣i可以組成貨幣j的最少貨幣數。假設現在有的貨幣,要求找出15元。當手裡有1元時,無法找出15元,但是當最大的貨幣數為5元時,可以有5+5+5這一種情況,貨幣數最少為3.

設此時的dp[i][j]為maxvalue(integer所能表示的最大值)。依次遍歷每一種貨幣值和目標錢數。其中有乙個重要的公式:

dp[i][j] = min;
即當前手裡的貨幣值最大的為i時,目標金額減去i的數值amount,計算最大為i求定額j-amount的數目。該值之前曾計算出來。注意需要在最終解上+1。同時還要和i-1情況下的貨幣值(也可以組成目標j的貨幣值)做乙個對比,取最小值。

public

intsolution(int coins,int aim)

}//計算每個陣列所需的最小貨幣數

int left = 0;

for(int i=1;ifor(int j=1;j1;j++)

dp[i][j] = left1][j]?left:dp[i-1][j];}}

return dp[coins.length-1][aim];

}

找錢最少貨幣數

題目1 給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種貨幣都可以使用任意張,再給定乙個整數aim代表要找的錢數,求組成aim的最少貨幣數。dp i j 表示前i中貨幣組成錢數j所用的最小貨幣數,那麼dp i j 等於 min dp i 1 j dp i j arra...

換錢最少貨幣數

給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,在給定乙個整數aim代表要找的錢數,求組成aim的最少貨幣數。public class mincoins int len arr.length int max integer.max value...

換錢的最少貨幣數

題目 給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求組成aim的最少貨幣數。舉例 arr 5,2,3 aim 20。4張5元可以組成20元,其他的找錢方案都要使用更多張的貨幣,所以返回4。arr 5,2...