赞
踩
逆向思维。
class Solution { public: int calculateMinimumHP(vector<vector<int>>& dungeon) { // 逆向思维。 // 这就是,我要进行的是 int n = dungeon.size(); int m = dungeon[0].size(); vector<vector<int>> dp(n, vector<int>(m, 0)); dp[n-1][m-1] = 0; for(int i = n-1;i>=0;i--){ for(int j = m-1;j>=0;j--){ if(i == n-1 and j == m-1){ dp[i][j] = max(1,1-dungeon[i][j]); }else if(i == n-1){ dp[i][j] = max(1,dp[i][j+1]-dungeon[i][j]); }else if(j == m-1){ dp[i][j] = max(1, dp[i+1][j]-dungeon[i][j]); }else{ dp[i][j] = max(min(dp[i+1][j], dp[i][j+1])-dungeon[i][j], 1); } } } return dp[0][0]; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。