AcWing 278. 【Java】数字组合
原题链接
简单
作者:
tt2767
,
2020-01-13 22:17:24
,
所有人可见
,
阅读 660
/*
1. 状态定义: f[j] 和为j的方案数
2. 状态计算: f[j] += f[j - a[i]]; 开始认为是 f[j] = f[j - a[i]] + 1 但是f[j] 可能已经被更新过了而且不一定等于1
f[j] 是选了a[i] 的方案, f[j-a[i]] 是没选a[i]的方案
3. 边界: f[~] = 0, f[0] = 1
*/
import java.util.*;
public class Main{
void run(){
int n = jin.nextInt();
int m = jin.nextInt();
for (int i = 1 ; i <= n ; i++) a[i] = jin.nextInt();
// Arrays.fill(f, Integer.MIN_VALUE);
f[0] = 1;
for (int i = 1 ; i <= n ; i++){
for (int j = m ; j >= a[i] ; j --){
// if (f[j - a[i]] == Integer.MIN_VALUE) continue;
// f[j] = f[j - a[i]] + 1;
f[j] += f[j - a[i]];
}
}
System.out.println(f[m]);
}
int maxN = 1002;
int maxM = 10002;
int[] a = new int[maxN];
int[] f = new int[maxM];
Scanner jin = new Scanner(System.in);
public static void main(String[] args) {new Main().run();}
}