揹包問題 II
對於物品體積[2, 3, 5, 7]和對應的價值[1, 5, 2, 4], 假設揹包大小爲10的話,最大能夠裝入的價值爲9。
A[i], V[i], n, m均爲整數。你不能將物品進行切分。你所挑選的物品總體積需要小於等於給定的m。
public class Solution {
/**
* @param m: An integer m denotes the size of a backpack
* @param A & V: Given n items with size A[i] and value V[i]
* @return: The maximum value
*/
public int backPackII(int m, int[] A, int V[]) {
// write your code here
if (A == null || 0 == A.length || m == 0)
return 0;
int len = A.length;
int[][] sum = new int[len][m+1];
for(int i=0;i<len;i++){
sum[i][0] = 0;
}
for(int j=0;j<m+1;j++){
if(j>=A[0]){
sum[0][j] = V[0];
}
}
for(int i=1;i<len;i++){
for(int j=1;j<m+1;j++){
if(j>=A[i]){
sum[i][j] = max(sum[i-1][j], sum[i-1][j-A[i]]+V[i]);
}else{
sum[i][j] = sum[i-1][j];
}
}
}
return sum[len-1][m];
}
public int max(int a, int b) {
return a > b ? a : b;
}
}