ネギ-- 174. ダンジョンゲーム

トピックリンク: 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 の質問を分析するプロセス全体です。もう学習しましたか? 上記の解決策が役に立った場合は、十分に注意してください。今後も動的計画法の古典的な問題を更新していきます。また次号でお会いしましょう。

おすすめ

転載: blog.csdn.net/weixin_70056514/article/details/131513364