思路:這是一道典型的動態規劃題,思路類似於揹包問題,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];
}
}