首先遞推公式 : 錢幣面值 從 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 }