AcWing 2. 01背包问题-Java
原题链接
简单
作者:
Shanzhihong
,
2019-08-02 10:16:12
,
所有人可见
,
阅读 1110
优化空间复杂度,主要思想是一维数组中存f[i-1] 0-v 的所有状态,每次迭代完,f数组中的值更新为f[i]的状态
如果理解不了一维是怎么优化的,推荐自己手写一下f[i][j]的全部变化过程,就好理解一些了
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] v = new int[n + 1];
int[] w = new int[n + 1];
for (int i = 1; i < n + 1; i++) {
v[i] = sc.nextInt();
w[i] = sc.nextInt();
}
System.out.print(solution(n, m, v, w));
}
public static int solution(int n, int m, int[] v, int[] w) {
int[] f = new int[m + 1];
for (int i = 1; i <= n; i++) {
for (int j = m; j >= v[i]; j--) {
f[j] = Math.max(f[j], f[j - v[i]] + w[i]);
}
}
return f[m];
}