LintCode(M)背包问题
2016-08-26 16:48
281 查看
以下代码为网上找的
注意点:
1.
这里是A[i]>j而不是A[i]>m.
2.
注意这里是 [A.length][m + 1]而不是[A.length][m ]
3.
注意这里是j< m+1,而不是j< m
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[][] dp = new int[A.length][m + 1];//动态规划矩阵 for(int i = 0; i < A.length; i ++) {//背包空间为0时,不管要放第几个物品,可装满的背包空间为0. dp[i][0] = 0; } for(int j = 1; j < m + 1; j++){ if(A[0] <= j) {//当第0个物品的空间小于等于当前背包空间j时 dp[0][j] = A[0];//背包可装满的最大空间是第0个物品的体积 }else {//当第0个物品的空间大于当前背包空间j时 dp[0][j] = 0;//背包可装满的最大空间是0 } for(int i = 1; i < A.length; i++) {//当放第1个到第A.length-1个物品时 if(A[i] > j) {//若该物品所占空间大于背包总空间(无论怎样腾背包空间,该物品无法放入背包 dp[i][j] = dp[i - 1][j];//背包可装满的最大空间不变 }else {//若该物品所占空间小于等于背包总空间,则需将背包空间腾出至少A[i]后,将该物品放入。放入新物品后背包最大可装满空间可能更大,也可能变小大,取大值作为背包空间为j且放第i个物品时可以有的最大可装满空间。 dp[i][j] = Math.max(dp[i-1][j - A[i]] + A[i], dp[i - 1][j]); } } } return dp[A.length - 1][m]; } }
注意点:
1.
if(A[i] > j) {//若该物品所占空间大于背包总空间(无论怎样腾背包空间,该物品无法放入背包
这里是A[i]>j而不是A[i]>m.
2.
int[][] dp = new int[A.length][m + 1];//动态规划矩阵
注意这里是 [A.length][m + 1]而不是[A.length][m ]
3.
for(int j = 1; j < m + 1; j++)
注意这里是j< m+1,而不是j< m
相关文章推荐
- 【LintCode】 Backpack II 背包问题II
- LintCode : 背包问题 II
- 背包问题2 (lintcode)
- 背包问题 II - LintCode
- LintCode 125. 背包问题 II
- LintCode-背包问题 II
- [LintCode]92.背包问题
- LintCode:M-背包问题 II
- LintCode-背包问题(01背包问题)
- LintCode:01背包问题
- LintCode(M)背包问题2
- 92.背包问题(lintcode)
- lintcode-125-背包问题 II
- LintCode : 背包问题 II
- LintCode:背包问题
- LintCode 背包问题
- LintCode刷题——背包问题
- LintCode背包问题总结
- LintCode刷题--背包问题 II
- lintcode:背包问题II