Backpack
public class Solution {
/**
* @param m: An integer m denotes the size of a backpack
* @param A: Given n items with size A[i]
* @return: The maximum size
*/
public int backPack(int m, int[] A) {
int n = A.length;
if (n == 0) {
return 0;
}
// 0个也算一种情况,所以是n+1种情况;0公斤也是一种情况,所以m+1种公斤的情况
boolean[][] f = new boolean[n + 1][m + 1];
int i, j;
f[0][0] = true;
for (i = 1; i <= m; ++i) {
f[0][i] = false;
}
//first i items
for (i = 1; i <= n; ++i) {
for (j = 0; j <= m; ++j) {
if (j - A[i - 1] >= 0) {
f[i][j] = f[i - 1][j] || f[i - 1][j - A[i - 1]];
} else {
f[i][j] = f[i - 1][j];
}
}
}
int res = 0;
//find maximum j such that f[n][i] = True
for (j = m; j >= 0; j--) {
if (f[n][j]) {
res = j;
break;
}
}
return res;
}
}
最后更新于
这有帮助吗?