Problem: Backpack III
思路
public class Solution {
/**
* @param A an integer array
* @param V an integer array
* @param m an integer
* @return an array
*/
public int backPackIII(int[] A, int[] V, int m) {
// Write your code here
int n = A.length;
int[] dp = new int[m + 1];
for(int j = 0; j < n; j++){
for(int i = A[j]; i <= m; i++){
//对于当前物品 j,若 i 从小到大的话,很可能在 i 之前的 i - A[j] 时已经放过第 j 件物品了,在 i 时再放就是重复放入;若 i 从大到小,则 i 之前的所有情况都没有更新过,不可能放过第 j 件物品,所以不会重复放入。
if(dp[i] < dp[i - A[j]] + V[j]){
dp[i] = dp[i - A[j]] + V[j];
}
}
}
return dp[m];
}
}Last updated