Java實現-揹包問題I

Narasimha_Karumanchi發表於2017-06-29

在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小為m,每個物品的大小為A[i]

 注意事項

你不可以將物品進行切割。

樣例

如果有4個物品[2, 3, 5, 7]

如果揹包的大小為11,可以選擇[2, 3, 5]裝入揹包,最多可以裝滿10的空間。

如果揹包的大小為12,可以選擇[2, 3, 7]裝入揹包,最多可以裝滿12的空間。

函式需要返回最多能裝滿的空間大小。

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) {
        // 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]]+A[i-1];
				}
				dp[i][j]=Math.max(dp[i][j], dp[i-1][j]);
			}
		}
		return dp[A.length][m];
    }
}


相關文章