Java實現-揹包問題II

Narasimha_Karumanchi發表於2017-06-29

給出n個物品的體積A[i]和其價值V[i],將他們裝入一個大小為m的揹包,最多能裝入的總價值有多大?

 注意事項

A[i], V[i], n, m均為整數。你不能將物品進行切分。你所挑選的物品總體積需要小於等於給定的m。

樣例

對於物品體積[2, 3, 5, 7]和對應的價值[1, 5, 2, 4], 假設揹包大小為10的話,最大能夠裝入的價值為9。

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(m==0||A.length==0||A==null){
			return 0;
		}
		int[][] dp=new int[A.length+1][m+1];
		for(int i=1;i<=A.length;i++){
			for(int j=m;j>=0;j--){
				if(j>=A[i-1]){
					dp[i][j]=dp[i-1][j-A[i-1]]+V[i-1];
				}
				dp[i][j]=Math.max(dp[i][j], dp[i-1][j]);
			}
		}
		return dp[A.length][m];
    }
}


相關文章