題目描述:現有硬幣六種,分別為1元、5元、10元、20元、50元、100元,假設每種硬幣數量均無限多,問用它們來湊夠N元有多少種組合方式。
package ers;
import java.util.Scanner;
/*
* 動態規划硬幣組合問題
*
*/
public class Main
{
public static void main(String[] args) throws Exception
{
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
int n = sc.nextInt();
int coin[] = {1,5,10,20,50,100};
//dp[i][j]表示用前i種硬幣湊成j元的組合數
long[][] dp = new long[7][n+1];
for(int i = 1; i <=n; i++)
{
dp[0][i]=0; //用0種硬幣湊成i元的組合數為0
}
for(int i = 0; i <=6; i++)
{
dp[i][0]=1; //用i種硬幣湊成0元的組合數為1,所有硬幣均為0個即可
}
for(int i=1;i<=6;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j] = 0;
for(int k =0;k<=j/coin[i-1];k++)
{
dp[i][j] += dp[i-1][j-k*coin[i-1]];
}
}
}
System.out.print(dp[6][n]);
}
}
}