LintCode:785. 最大權值和路徑(動態規劃)

思路:這是一道典型的動態規劃題,思路類似於揹包問題,dp中每個元素的值分別是來自於該位置上方和該位置右邊的較大的一個值,新建dp矩陣,int[][] dp=new int[row+1][col+1]。

注意是從右上角開始到左下角結束,狀態轉移方程爲 dp[i][j]=max(dp[i][j+1]+nums[i-1][j],dp[i-1][j]+nums[i-1][j])(i從1開始,j從col-1遞減,所以dp[i][j]對應的權值矩陣爲nums[i-1][j])

最後返回的是左下角元素dp[row][0].

public class Solution {
    /**
     * @param nums: 
     * @param k: 
     * @return: nothing
     */
    public int maxWeight(int[][] nums) {
        int row=nums.length;
        int col=nums[0].length;
        int[][] dp=new int[row+1][col+1];
        for(int i=1;i<=row;i++){
            for(int j=col-1;j>=0;j--){
                dp[i][j]=Math.max(dp[i][j+1]+nums[i-1][j],dp[i-1][j]+nums[i-1][j]);  //分別從右邊和從上邊的
            }
        }
        return dp[row][0];
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章