在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]
注意事项
你不可以将物品进行切割。
如果有4个物品[2, 3, 5, 7]
如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间。
如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间。
函数需要返回最多能装满的空间大小。
/*public class Solution {
public int backPack(int m, int[] A) {
// write your code here
int len = A.length;
int[][] P = new int[len+1][m+1];
for(int i = 1;i<= len; i++){
//for(int j = 1;j<m+1;j++){
for(int j=m;j>=0;j--){//不能j>=A[i]
//判断!!
if(A[i-1]<=j){
P[i][j] = P[i-1][j-A[i-1]] + A[i-1];
}
P[i][j] = Math.max(P[i][j],P[i-1][j]);
}
}
return P[len][m];
}
}*///博客
public class Solution {
public int backPack(int m, int[] A) {
int len = A.length;
int[] result = new int[m + 1];
for (int i = 0; i < len; i++) {
for (int j = m; j >= A[i]; j--) {//!!j>=A[i]
int temp = result[j - A[i]] + A[i];
result[j] = Math.max(result[j], temp);
}
}
return result[m];
}
}