【问题】给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。
输入描述:
输入包括一个整数n(1 ≤ n ≤ 10000)
输出描述:
输出一个整数,表示不同的组合方案数
输入例子1:
1
输出例子1:
1
【解决】
① 动态规划,dp[i][j]表示前i种币值组合成j元的组合数。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] coins = {1,5,10,20,50,100};
long[][] dp = new long[6][n + 1];
Arrays.fill(dp[0],1);
for (int i = 1;i < 6;i ++){
for (int j = 1;j <= n;j ++){
int m = j / coins[i];
for (int k = 0;k <= m;k ++){
dp[i][j] += dp[i - 1][j - k * coins[i]];
}
}
}
System.out.println(dp[5][n]);
}
}