首先递推公式 : 钱币面值 从 1,一直遍历到 n , 然后兑换的面值从 j=1 到 j 等于最大的面值, 面对 第 i种面值的硬币,有两种选择,不选则当前硬币面值的所有情况 加上选择当前面值的
所有情况 ,于是 就得出了 一个 递推公式 F[ j ] += F[ j - value[ i ] ];
问题描述:
Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input 每行只有一个正整数N,N小于32768。
Output 对应每个输入,输出兑换方法数。
Sample Input 2934 12553
Sample Output 718831 13137761
Java 实现Ac 代码
1 import java.util.Scanner;
2
3 public class Main {
4
5 public static void main(String[] args) {
6
7 Scanner cin = new Scanner (System.in);
8 while(cin.hasNext()){
9 int n = cin.nextInt();
10 int [] value = {1,2,3};
11 int [] dp = new int [32800];
12
13 dp [0] =1;
14 for(int i = 0;i<value.length;i++){
15 for(int j = value[i];j<=n;j++){
16 dp[j] = dp[j]+dp[j-value[i]];
17 }
18 }
19
20
21 System.out.println(dp[n]);
22 }
23
24 }
25
26 }