这一题刷得太有意思了
矩阵 典型dp 但从左上角开始思考时 要考虑到和以及每一个点所需要的health,每个点维持两个值,比较吃力
看了上面链接中的solution,这不就是正难则反的思想吗!
很不错!
public class Solution {
public static void main(String[] args){
Solution s = new Solution();
int[][] g = {{1,2},{1,1}};
}
public int calculateMinimumHP(int[][] g) {
int res = 1;
int m = g.length;
if(m==0) return 1;
int n = g[0].length;
int[][] dp = new int[m][n];
for(int i=m-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
if(i<m-1&&j<n-1) {
dp[i][j] = ((dp[i+1][j]<dp[i][j+1]?dp[i+1][j]:dp[i][j+1]) - g[i][j]);
dp[i][j] = dp[i][j]<=0?1:dp[i][j];
}
else{
if(i==m-1&&j==n-1) dp[i][j] = g[i][j]>=0?1:(-g[i][j]+1);
if(i==m-1&&j<n-1) dp[i][j] = dp[i][j+1]- g[i][j];
if(i<m-1&&j==n-1) dp[i][j] = dp[i+1][j]- g[i][j];
dp[i][j] = dp[i][j]<=0?1:dp[i][j];
}
}
}
return dp[0][0];
}
}