0-1 背包
有一批物品,物品存在重量和价值两项属性。在一个总重量的限制下,求可以获取到的最大总价值,每项物品最多只可以被选取一次。
public int zeroOnePackage(int capacity, int[] fees
, int[] values) {
int len = fees.length;
int[] dpArr = new int[len][capacity];
for (int j = 0; j < capacity; j++) {
dp[0][j] = j < fees[0] ? 0 : values[0];
}
for (int i = 1; i < len; i++) {
for (int j = 0; j < capacity; j++) {
int sum1 = dpArr[i - 1][j];
int sum2 = j >= fees[i]
? dpArr[i - 1][j - fees[i]] + values[j] : 0;
dpArr[i][j] = Math.max(sum1, sum2);
}
}
return dpArr[len - 1][capacity];
}