首先递推公式 : 钱币面值 从 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 }