题目描述
给你六种面额1、5、10、20、50、100元的纸币,假设每种币值的数量都足够多,编写程序求组成N员(N为0-10000的非负整数)的不同组合的个数。
输入描述:
输入为一个数字N,即需要拼凑的面额
输出描述:
输出也是一个数字,为组成N的组合个数。
Java解法:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test05 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
System.out.println(deal(cnt));
}
private static long deal(int cnt) {
int [] table = {1, 5, 10, 20, 50, 100};
long [] dp = new long[cnt + 1];
dp[0] = 1;
for (int i : table) {
for (int j = i; j < dp.length; j++) {
dp[j] += dp[j - i];
}
}
return dp[cnt];
}
}