Backpack II
public class Solution {
/**
* @param m: An integer m denotes the size of a backpack
* @param A: Given n items with size A[i]
* @param V: Given n items with value V[i]
* @return: The maximum value
*/
public int backPackII(int m, int[] A, int[] V) {
int n = A.length;
if (n == 0) {
return 0;
}
int f[][] = new int[n + 1][m + 1];
f[0][0] = 0;
int i, j;
for (j = 1; j <= m; j++) {
f[0][j] = -1; //impossible
}
for (i = 1; i <= n; i++) {
for (j = 0; j <= m; j++) {
f[i][j] = f[i - 1][j];
if (j >= A[i - 1] && f[i - 1][j - A[i - 1]] != -1) {
f[i][j] = Math.max(f[i][j], f[i - 1][j - A[i - 1]] + V[i - 1]);
}
}
}
int res = 0;
for (j = 0; j <= m; ++j) {
if (f[n][j] != -1) {
res = Math.max(res, f[n][j]);
}
}
return res;
}
}
最后更新于
这有帮助吗?