AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 174. Dungeon Game    原题链接    困难

作者: 作者的头像   邓泽军 ,  2019-09-12 22:56:47 ,  所有人可见 ,  阅读 1011


3


题目描述

1.这题不能直接求路径和最大,因为,如果走某一个点和小于等于0,就挂了。

2.可以倒着走,遇到公主后,血量最少为1.

f[i][j] = max(1, min(f[i + 1][j], f[i][j + 1]) - dungeon[i][i]);

  • f[i][j]表示到(i, j)点需要最少的血量。

  • 方便计算多添加一行一列。使f[n][m - 1] = 1, f[m][m - 1] = 1;

C++ 代码

class Solution {
public:
    int calculateMinimumHP(vector<vector<int>>& dungeon) {
        int n = dungeon.size(), m = dungeon[0].size();
        if (!n) return 0;
        vector<vector<int>> f(n + 1, vector<int>(m + 1, INT_MAX));
        f[n][m - 1] = 1, f[n - 1][m] = 1;
        for (int i = n - 1; i >= 0; i --) {
            for (int j = m - 1; j >= 0; j --) {
                f[i][j] = max(1, min(f[i + 1][j], f[i][j + 1]) - dungeon[i][j]);
            }
        }
        return f[0][0];
    }
};

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息