AcWing:1371. 货币系统
题型: 3. 完全背包问题
dp 问题
每次货币使用的次数不限, 完全背包问题(求解的时候在一定的容量下,可以获得的物品的最大价值)
而这里是求方案数
AC Code
import java.util.*;
import static java.lang.System.out;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int v = in.nextInt();
int n = in.nextInt();
int[] w = new int[v];
for(int i = 0; i < v; i++) w[i] = in.nextInt();
// 方案数很大
long [] dp = new long[n + 1];
dp[0] = 1;
//个数
for(int i = 0; i < v; i++) {
// 面值
for(int j = w[i]; j <= n; j++) {
dp[j] += dp[j - w[i]];
// 完全背包问题: dp[j] = Math.max(dp[j], dp[j - w[i]] + w[i]);
}
}
out.println(dp[n]);
}
}