題目來源:usaco training 2.3
時間限制:1000ms 內存限制:64mbjava
給定 \(V\) 種貨幣(單位:元),每種貨幣使用的次數不限。
不一樣種類的貨幣,面值多是相同的。
如今,要你用這 \(V\) 種貨幣湊出 \(N\) 元錢,請問共有多少種不一樣的湊法。shell
第一行包含兩個整數 \(V\) 和 \(N\)。
接下來的若干行,將一共輸入 \(V\) 個整數,每一個整數表示一種貨幣的面值。spa
輸出一個整數,表示所求總方案數。code
\(1 ≤ V ≤ 25\) ,
\(1 ≤ N ≤ 10000\) ,
答案保證在 C/C++:long long
Java:long
範圍內。內存
3 10 1 2 5
10
import java.util.*; public class Main { static long getPlanCount(int[] money, int n) { int len = money.length; long[][] dp = new long[len + 1][n + 1]; dp[0][0] = 1; for (int i = 1; i <= len; i++) { int vi = money[i - 1]; for (int j = 0; j <= n; j++) { dp[i][j] = dp[i - 1][j]; if (j >= vi) { dp[i][j] += dp[i][j - vi]; } } } return dp[len][n]; } public static void main(String[] args) { Scanner input = new Scanner(System.in); int v = input.nextInt(); int n = input.nextInt(); int[] money = new int[v]; for (int i = 0; i < v; i++) { money[i] = input.nextInt(); } input.close(); System.out.println(getPlanCount(money, n)); } }