国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動(dòng)態(tài)規(guī)劃——地下城游戲

這篇具有很好參考價(jià)值的文章主要介紹了動(dòng)態(tài)規(guī)劃——地下城游戲。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目鏈接

leetcode在線oj題——地下城游戲

題目描述

惡魔們抓住了公主并將她關(guān)在了地下城 dungeon 的 右下角 。地下城是由 m x n 個(gè)房間組成的二維網(wǎng)格。我們英勇的騎士最初被安置在 左上角 的房間里,他必須穿過地下城并通過對(duì)抗惡魔來拯救公主。

騎士的初始健康點(diǎn)數(shù)為一個(gè)正整數(shù)。如果他的健康點(diǎn)數(shù)在某一時(shí)刻降至 0 或以下,他會(huì)立即死亡。

有些房間由惡魔守衛(wèi),因此騎士在進(jìn)入這些房間時(shí)會(huì)失去健康點(diǎn)數(shù)(若房間里的值為負(fù)整數(shù),則表示騎士將損失健康點(diǎn)數(shù));其他房間要么是空的(房間里的值為 0),要么包含增加騎士健康點(diǎn)數(shù)的魔法球(若房間里的值為正整數(shù),則表示騎士將增加健康點(diǎn)數(shù))。

為了盡快解救公主,騎士決定每次只 向右 或 向下 移動(dòng)一步。

返回確保騎士能夠拯救到公主所需的最低初始健康點(diǎn)數(shù)。

注意:任何房間都可能對(duì)騎士的健康點(diǎn)數(shù)造成威脅,也可能增加騎士的健康點(diǎn)數(shù),包括騎士進(jìn)入的左上角房間以及公主被監(jiān)禁的右下角房間。

題目示例

示例1

動(dòng)態(tài)規(guī)劃——地下城游戲
輸入:dungeon = [[-2,-3,3],[-5,-10,1],[10,30,-5]]
輸出:7
解釋:如果騎士遵循最佳路徑:右 -> 右 -> 下 -> 下 ,則騎士的初始健康點(diǎn)數(shù)至少為 7 。

示例2

輸入:dungeon = [[0]]
輸出:1

題目提示

  • m == dungeon.length
  • n == dungeon[i].length
  • 1 <= m, n <= 200
  • -1000 <= dungeon[i][j] <= 1000

解題思路

之前介紹的動(dòng)態(tài)規(guī)劃題目都是從左上角開始,迭代動(dòng)態(tài)規(guī)劃方程,一直走到右下角,得到最終的結(jié)果,但是這道題是需要我們給出初始的血量,因此需要從右下角開始,向左上角迭代

當(dāng)進(jìn)入到負(fù)數(shù)的房間時(shí),騎士會(huì)扣血,但是我們是從最后一個(gè)房間推導(dǎo)前面的房間,因此往前走遇到負(fù)數(shù)需要加血,遇到正數(shù)可以減血

而當(dāng)前狀態(tài)最小血量應(yīng)該是走下面和走右面都可以支撐,因此是求下面和右面狀態(tài)的較小者 - 當(dāng)前房間的buff

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

如果得到的數(shù)字是負(fù)數(shù),說明到這個(gè)位置騎士已經(jīng)死了,這是不應(yīng)該的,騎士最小也要有一點(diǎn)血,因此將其重新變?yōu)?點(diǎn)血

dp[i][j] = Math.max(1, dp[i][j]);

從右下角開始迭代需要考慮越界問題,最下面一行和最右面一列會(huì)出現(xiàn)越界,為了簡(jiǎn)化代碼,可以將dp數(shù)組多添加一行一列,而為了不改變動(dòng)態(tài)方程的有效性,最下面一行和最右面一列需要填入不影響其他位置的值——正無窮大

而為了使得最后一個(gè)房間的buff減益后還能剩一點(diǎn)血量,dp[m - 1][n] = dp[m][n - 1] = 1;文章來源地址http://www.zghlxwxcb.cn/news/detail-513776.html

完整代碼

class Solution {
    public int calculateMinimumHP(int[][] dungeon) {
        int m = dungeon.length;;
        int n = dungeon[0].length;
        int[][] dp = new int[m + 1][n + 1];

        for(int i = 0; i <= n; i++){
            dp[m][i] = Integer.MAX_VALUE;
        }
        for (int i = 0; i <= m; i++) {
            dp[i][n] = Integer.MAX_VALUE;
        }
        dp[m - 1][n] = 1;
        dp[m][n - 1] = 1;

        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                dp[i][j] = Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j];
                dp[i][j] = Math.max(1, dp[i][j]);
            }
        }
        return dp[0][0];
    }
}

到了這里,關(guān)于動(dòng)態(tài)規(guī)劃——地下城游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【動(dòng)態(tài)規(guī)劃算法】第十題:174.地下城游戲

    【動(dòng)態(tài)規(guī)劃算法】第十題:174.地下城游戲

    ??作者:小樹苗渴望變成參天大樹?? ??作者宣言:認(rèn)真寫好每一篇博客?? ??作者gitee:gitee? ??作者專欄:C語言,數(shù)據(jù)結(jié)構(gòu)初階,Linux,C++ 動(dòng)態(tài)規(guī)劃算法?? 如 果 你 喜 歡 作 者 的 文 章 ,就 給 作 者 點(diǎn) 點(diǎn) 關(guān) 注 吧! 今天我開始講解動(dòng)態(tài)規(guī)劃第十題,也是路徑問題的最后一

    2024年02月13日
    瀏覽(27)
  • 【動(dòng)態(tài)規(guī)劃刷題 5】 最小路徑和&&地下城游戲

    【動(dòng)態(tài)規(guī)劃刷題 5】 最小路徑和&&地下城游戲

    鏈接: 64. 最小路徑和 給定一個(gè)包含非負(fù)整數(shù)的 m x n 網(wǎng)格 grid ,請(qǐng)找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字總和為最小。 說明:每次只能向下或者向右移動(dòng)一步。 輸入:grid = [[1,3,1],[1,5,1],[4,2,1]] 輸出:7 解釋:因?yàn)槁窂?1→3→1→1→1 的總和最小。 示例 2: 輸入

    2024年02月13日
    瀏覽(27)
  • 【動(dòng)態(tài)規(guī)劃專欄】專題二:路徑問題--------6.地下城游戲

    【動(dòng)態(tài)規(guī)劃專欄】專題二:路徑問題--------6.地下城游戲

    本專欄內(nèi)容為:算法學(xué)習(xí)專欄,分為優(yōu)選算法專欄,貪心算法專欄,動(dòng)態(tài)規(guī)劃專欄以及遞歸,搜索與回溯算法專欄四部分。 通過本專欄的深入學(xué)習(xí),你可以了解并掌握算法。 ??博主csdn個(gè)人主頁:小小unicorn ?專欄分類:動(dòng)態(tài)規(guī)劃專欄 ??代碼倉(cāng)庫:小小unicorn的代碼倉(cāng)庫??

    2024年02月22日
    瀏覽(31)
  • 【動(dòng)態(tài)規(guī)劃】【 矩陣】【逆向思考】C++算法174地下城游戲

    【動(dòng)態(tài)規(guī)劃】【 矩陣】【逆向思考】C++算法174地下城游戲

    視頻算法專題 動(dòng)態(tài)規(guī)劃匯總 矩陣 逆向思考 惡魔們抓住了公主并將她關(guān)在了地下城 dungeon 的 右下角 。地下城是由 m x n 個(gè)房間組成的二維網(wǎng)格。我們英勇的騎士最初被安置在 左上角 的房間里,他必須穿過地下城并通過對(duì)抗惡魔來拯救公主。 騎士的初始健康點(diǎn)數(shù)為一個(gè)正整數(shù)

    2024年02月03日
    瀏覽(22)
  • 【動(dòng)態(tài)規(guī)劃上分復(fù)盤】這是你熟悉的地下城游戲嗎?

    【動(dòng)態(tài)規(guī)劃上分復(fù)盤】這是你熟悉的地下城游戲嗎?

    本文講解關(guān)于動(dòng)態(tài)規(guī)劃思路的兩道題目。 1.確定狀態(tài)表示(確定dp數(shù)組的含義) 2.確定狀態(tài)轉(zhuǎn)移方程(確定dp的遞推公式) 3.確定如何初始化(初始化要保證填表正確) 4.確定遍歷順序 5.返回值 點(diǎn)我直達(dá)~ 根據(jù)題目可知,每一個(gè)位置都對(duì)應(yīng)這三種情況: (d[i][j]由題目給出。)

    2024年02月12日
    瀏覽(23)
  • 【LeetCode】動(dòng)態(tài)規(guī)劃類題目詳解

    【LeetCode】動(dòng)態(tài)規(guī)劃類題目詳解

    所有題目均來自于LeetCode,刷題代碼使用的Python3版本 如果某一個(gè)問題有重疊的子問題,則使用動(dòng)態(tài)規(guī)劃進(jìn)行求解是最有效的。 動(dòng)態(tài)規(guī)劃中每一個(gè)狀態(tài)一定是由上一個(gè)狀態(tài)推導(dǎo)出來的,這一點(diǎn)區(qū)別于貪心算法 動(dòng)態(tài)規(guī)劃五部曲 確定dp數(shù)組以及下標(biāo)的含義 確定遞推公式 dp數(shù)組如何

    2024年04月11日
    瀏覽(37)
  • 【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動(dòng)態(tài)規(guī)劃)

    【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動(dòng)態(tài)規(guī)劃)

    題目鏈接:5. 最長(zhǎng)回文子串 題目?jī)?nèi)容: 題目就是要我們找s中的回文子串,還要是最長(zhǎng)的。其實(shí)想想,暴力求解也行……就是遍歷所有的子串,同時(shí)判斷是不是回文串,是的話再和記錄的最大長(zhǎng)度maxlen比較,如果更長(zhǎng)就更新。時(shí)間復(fù)雜度直接變成O(n^3)。 優(yōu)化的點(diǎn)在于,假設(shè)子

    2024年02月09日
    瀏覽(27)
  • 【leetcode熱題】 地下城游戲

    【leetcode熱題】 地下城游戲

    惡魔們抓住了公主并將她關(guān)在了地下城? dungeon ?的? 右下角 ?。地下城是由? m x n ?個(gè)房間組成的二維網(wǎng)格。我們英勇的騎士最初被安置在? 左上角 ?的房間里,他必須穿過地下城并通過對(duì)抗惡魔來拯救公主。 騎士的初始健康點(diǎn)數(shù)為一個(gè)正整數(shù)。如果他的健康點(diǎn)數(shù)在某一時(shí)刻

    2024年03月20日
    瀏覽(11)
  • LeetCode刷題--- 地下城游戲

    LeetCode刷題--- 地下城游戲

    個(gè)人主頁: 元清加油_【C++】,【C語言】,【數(shù)據(jù)結(jié)構(gòu)與算法】-CSDN博客 個(gè)人專欄 力扣遞歸算法題 ? 【C++】? ?? ?????? 數(shù)據(jù)結(jié)構(gòu)與算法 ???? 前言:這個(gè)專欄主要講述動(dòng)態(tài)規(guī)劃算法,所以下面題目主要也是這些算法做的 ? 我講述題目會(huì)把講解部分分為3個(gè)部分: 1、

    2024年01月18日
    瀏覽(17)
  • leetcode877. 石子游戲(動(dòng)態(tài)規(guī)劃-java)

    leetcode877. 石子游戲(動(dòng)態(tài)規(guī)劃-java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/stone-game Alice 和 Bob 用幾堆石子在做游戲。一共有偶數(shù)堆石子,排成一行;每堆都有 正 整數(shù)顆石子,數(shù)目為 piles[i] 。 游戲以誰手中的石子最多來決出勝負(fù)。石子的 總數(shù) 是 奇數(shù) ,所以沒有平局。 Alice 和 Bob 輪流進(jìn)行,Alic

    2024年02月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包