题目链接:174. 地下城游戏 - 力扣(LeetCode)
下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。
参考代码:
class Solution {
public:
int calculateMinimumHP(vector<vector<int>>& dungeon) {
int m=dungeon.size();
int n=dungeon[0].size();
//防止超出正数范围的一个技巧,足够大又不会超出最大整数,是最大整数的一半
int INF=0x3f3f3f3f;
//多开一行和一列
vector<vector<int>> dp(m+1,vector<int>(n+1,INF));
//初始化两个特殊位置
dp[m-1][n]=dp[m][n-1]=1;
//从下往上,从右往左填表
for(int i=m-1;i>=0;i--)
{
for(int j=n-1;j>=0;j--)
{
dp[i][j]=min(dp[i][j+1],dp[i+1][j])-dungeon[i][j];
//处理特殊情况
dp[i][j]=max(dp[i][j],1);
}
}
return dp[0][0];
}
};
以上就是分析这道dp题目的整个过程啦,你学会了吗?如果以上题解对你有所帮助,那么就点亮一下小心心,点点关注呗,后期还会持续更新动态规划的经典题目哦,我们下期见!!!!! !!!!