01背包
f[i][j]表示从前i个物品中选,并且总体积不超过j的状态(最大值,最小值,数量等)
优化之前的状态转移
f[i][j] = Math.max(f[i-1][j], f[i-1][j-vi] + wi);
vi表示i物品的体积,wi表示i物品的价值
优化之后的代码:
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]]);
}
}