日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 174. 地下城游戏(DP)

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 174. 地下城游戏(DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

一些壞人抓住了公主(P)并將她關在了地下城的右下角。
地下城是由 M x N 個房間組成的二維網格。
我們英勇的騎士(K)最初被安置在左上角的房間里,
他必須穿過地下城并通過對抗壞人來拯救公主。

騎士的初始健康點數為一個正整數。
如果他的健康點數在某一時刻降至 0 或以下,他會立即死亡。

有些房間由壞人守衛,因此騎士在進入這些房間時會失去健康點數(若房間里的值為負整數,則表示騎士將損失健康點數);
其他房間要么是空的(房間里的值為 0),要么包含增加騎士健康點數的魔法球(若房間里的值為正整數,則表示騎士將增加健康點數)。

為了盡快到達公主,騎士決定每次只向右或向下移動一步。

編寫一個函數來計算確保騎士能夠拯救到公主所需的最低初始健康點數

例如,考慮到如下布局的地下城,如果騎士遵循最佳路徑 右 ->->-> 下,則騎士的初始健康點數至少為 7-2 (K) -3 3 -5 -10 1 10 30 -5 (P) 說明: 騎士的健康點數沒有上限。任何房間都可能對騎士的健康點數造成威脅, 也可能增加騎士的健康點數, 包括騎士進入的左上角房間以及公主被監禁的右下角房間。

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/dungeon-game
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 參考官方的解題
  • 正向不好計算最低的初始生命值,反向考慮
  • dp[i][j]表示走到 坐標處的所需的最低生命值
class Solution { public:int calculateMinimumHP(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(), i, j, minlife;vector<vector<int>> dp(m+1,vector<int>(n+1, INT_MAX));dp[m][n-1] = dp[m-1][n] = 1;//處理邊界更方便for(i = m-1; i >= 0; --i){for(j = n-1; j >= 0; --j){minlife = min(dp[i+1][j], dp[i][j+1]);//使用較小的dp[i][j] = max(minlife-grid[i][j], 1);//在 i,j,處你的生命值至少需要為1}}return dp[0][0];} };


12 ms 8.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 174. 地下城游戏(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。