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

【Leetcode每日一題】 動(dòng)態(tài)規(guī)劃 - 地下城游戲(難度???)(61)

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

1. 題目解析

題目鏈接:174. 地下城游戲

【Leetcode每日一題】 動(dòng)態(tài)規(guī)劃 - 地下城游戲(難度???)(61),leetcode每日一題,算法,leetcode,動(dòng)態(tài)規(guī)劃,游戲,c++

這個(gè)問(wèn)題的理解其實(shí)相當(dāng)簡(jiǎn)單,只需看一下示例,基本就能明白其含義了。

2.算法原理

一、狀態(tài)表定義

在解決地下城游戲問(wèn)題時(shí),我們首先需要對(duì)狀態(tài)進(jìn)行恰當(dāng)?shù)亩x。一個(gè)直觀的想法是,從起點(diǎn)開(kāi)始,到達(dá)[i, j]位置時(shí)所需的最低初始健康點(diǎn)數(shù)。然而,這樣的定義會(huì)導(dǎo)致?tīng)顟B(tài)轉(zhuǎn)移時(shí)面臨困難,因?yàn)楫?dāng)前位置的健康點(diǎn)數(shù)會(huì)受到后續(xù)路徑的影響。

為了解決這個(gè)問(wèn)題,我們采用另一種狀態(tài)定義方式:從[i, j]位置出發(fā),到達(dá)終點(diǎn)時(shí)所需的最低初始健康點(diǎn)數(shù)。這樣定義的好處在于,當(dāng)我們?cè)赱i, j]位置時(shí),后續(xù)的最佳狀態(tài)已經(jīng)確定,從而可以順利地進(jìn)行狀態(tài)轉(zhuǎn)移。

因此,我們定義狀態(tài)表dp如下:dp[i][j]表示從[i, j]位置出發(fā),到達(dá)終點(diǎn)時(shí)所需的最低初始健康點(diǎn)數(shù)。

二、狀態(tài)轉(zhuǎn)移過(guò)程

在[i, j]位置,玩家有兩種選擇:向右走或向下走。我們需要根據(jù)這兩種選擇來(lái)推導(dǎo)dp[i][j]的值。

  1. 向右走到達(dá)下一個(gè)位置,然后從該位置繼續(xù)到達(dá)終點(diǎn)。根據(jù)狀態(tài)定義,這要求我們?cè)赱i, j]位置的最低健康點(diǎn)數(shù)加上當(dāng)前位置的消耗,應(yīng)大于等于右邊位置的最低健康點(diǎn)數(shù)。即:x + dungeon[i][j] >= dp[i][j + 1]。通過(guò)移項(xiàng),我們得到x的一個(gè)可能取值:x >= dp[i][j + 1] - dungeon[i][j]。

  2. 向下走到達(dá)下一個(gè)位置,然后從該位置繼續(xù)到達(dá)終點(diǎn)。同樣地,我們要求[i, j]位置的最低健康點(diǎn)數(shù)加上當(dāng)前位置的消耗,應(yīng)大于等于下邊位置的最低健康點(diǎn)數(shù)。即:x + dungeon[i][j] >= dp[i + 1][j]。通過(guò)移項(xiàng),我們得到x的另一個(gè)可能取值:x >= dp[i + 1][j] - dungeon[i][j]。

為了得到最小的初始健康點(diǎn)數(shù),我們?nèi)∵@兩種情況下的最小值作為dp[i][j]的候選值。因此,狀態(tài)轉(zhuǎn)移方程為:dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j]。

然而,需要注意的是,如果當(dāng)前位置的dungeon[i][j]是一個(gè)較大的正數(shù),那么dp[i][j]的值可能會(huì)變成0或負(fù)數(shù),這意味著最低點(diǎn)數(shù)會(huì)小于1,導(dǎo)致玩家死亡。因此,我們需要對(duì)dp[i][j]進(jìn)行修正,確保其值至少為1。修正后的狀態(tài)轉(zhuǎn)移方程為:dp[i][j] = max(1, dp[i][j])。

三、初始化

為了正確地進(jìn)行狀態(tài)轉(zhuǎn)移,我們需要對(duì)dp表進(jìn)行初始化。一個(gè)常用的技巧是在dp表的最前面添加一行和一列輔助節(jié)點(diǎn)。這些輔助節(jié)點(diǎn)的值需要保證后續(xù)填表是正確的。在本題中,我們可以將所有輔助節(jié)點(diǎn)的值初始化為無(wú)窮大,然后設(shè)置dp[m][n - 1] = dp[m - 1][n] = 1,其中m和n分別是地圖的行數(shù)和列數(shù)。

四、填表順序

根據(jù)狀態(tài)轉(zhuǎn)移方程,我們需要從下往上逐行填寫(xiě)dp表,每行從左往右進(jìn)行填寫(xiě)。這樣的填表順序可以確保在計(jì)算每個(gè)位置的dp值時(shí),其右側(cè)和下方的位置已經(jīng)計(jì)算完畢,從而可以利用這些已知值進(jìn)行狀態(tài)轉(zhuǎn)移。

五、返回值

最后,根據(jù)狀態(tài)表定義,我們需要返回dp[0][0]的值,即從起點(diǎn)出發(fā)到達(dá)終點(diǎn)時(shí)所需的最低初始健康點(diǎn)數(shù)。

3.代碼編寫(xiě)

class Solution 
{
public:
    int calculateMinimumHP(vector<vector<int>>& d) 
    {
        int m = d.size(), n = d[0].size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
        dp[m][n - 1] = dp[m - 1][n] = 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]) - d[i][j];
                dp[i][j] = max(1, dp[i][j]);
            }
        }
        return dp[0][0];
    }
};

The Last

嗯,就是這樣啦,文章到這里就結(jié)束啦,真心感謝你花時(shí)間來(lái)讀。

覺(jué)得有點(diǎn)收獲的話,不妨給我點(diǎn)個(gè)吧!

如果發(fā)現(xiàn)文章有啥漏洞或錯(cuò)誤的地方,歡迎私信我或者在評(píng)論里提醒一聲~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861595.html

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

本文來(lái)自互聯(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ī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    難度:困難 給你一個(gè)字符串 s ,請(qǐng)你將 s 分割成一些子串,使每個(gè)子串都是回文。 返回符合要求的 最少分割次數(shù) 。 示例 1: 輸入:s = “aab” 輸出:1 解釋:只需一次分割就可將 s 分割成 [“aa”,“b”] 這樣兩個(gè)回文子串。 示例 2: 輸入:s = “a” 輸出:0 示例 3: 輸入:

    2024年02月15日
    瀏覽(43)
  • 【Leetcode每日一題】模擬 - 數(shù)青蛙(難度??)(54)

    【Leetcode每日一題】模擬 - 數(shù)青蛙(難度??)(54)

    1. 題目解析 題目鏈接:1419. 數(shù)青蛙 這個(gè)問(wèn)題的理解其實(shí)相當(dāng)簡(jiǎn)單,只需看一下示例,基本就能明白其含義了。 2.算法原理 一、模擬青蛙叫聲的基本邏輯 在模擬青蛙叫聲的過(guò)程中,我們需要遵循一定的規(guī)則來(lái)判斷何時(shí)青蛙會(huì)發(fā)出聲音。具體規(guī)則如下: 當(dāng)遇到字符序列 \\\'r\\\'、

    2024年04月11日
    瀏覽(17)
  • ( 動(dòng)態(tài)規(guī)劃) 674. 最長(zhǎng)連續(xù)遞增序列 / 718. 最長(zhǎng)重復(fù)子數(shù)組——【Leetcode每日一題】

    ( 動(dòng)態(tài)規(guī)劃) 674. 最長(zhǎng)連續(xù)遞增序列 / 718. 最長(zhǎng)重復(fù)子數(shù)組——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)未經(jīng)排序的整數(shù)數(shù)組,找到最長(zhǎng)且 連續(xù)遞增的子序列 ,并返回該序列的長(zhǎng)度。 連續(xù)遞增的子序列 可以由兩個(gè)下標(biāo) l 和 r(l r) 確定,如果對(duì)于每個(gè) l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是連續(xù)遞增子序列。

    2024年02月05日
    瀏覽(24)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    難度:中等 把 n 個(gè)骰子扔在地上,所有骰子朝上一面的點(diǎn)數(shù)之和為 s 。輸入 n ,打印出s的所有可能的值出現(xiàn)的概率。 你需要用一個(gè)浮點(diǎn)數(shù)數(shù)組返回答案,其中第 i 個(gè)元素代表這 n 個(gè)骰子所能擲出的點(diǎn)數(shù)集合中第 i 小的那個(gè)的概率。 示例 1: 輸入: 1 輸出: [0.16667,0.16667,0.16667,

    2024年02月11日
    瀏覽(19)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 輸入一個(gè)整型數(shù)組,數(shù)組中的一個(gè)或連續(xù)多個(gè)整數(shù)組成一個(gè)子數(shù)組。求所有子數(shù)組的和的最大值。 要求時(shí)間復(fù)雜度為 O(n) 。 示例1: 輸入: nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。 提示 : 1 = a r r . l e n g t h = 1 0 5 1 = arr.length = 10^

    2024年02月11日
    瀏覽(27)
  • Leetcode-每日一題【61.旋轉(zhuǎn)鏈表】

    Leetcode-每日一題【61.旋轉(zhuǎn)鏈表】

    給你一個(gè)鏈表的頭節(jié)點(diǎn)? head ?,旋轉(zhuǎn)鏈表,將鏈表每個(gè)節(jié)點(diǎn)向右移動(dòng)? k ? 個(gè)位置。 示例 1: 輸入:head = [1,2,3,4,5], k = 2 輸出:[4,5,1,2,3] 示例 2: ? 輸入: head = [0,1,2], k = 4 輸出: [2,0,1] 提示: 鏈表中節(jié)點(diǎn)的數(shù)目在范圍? [0, 500] ?內(nèi) -100 = Node.val = 100 0 = k = 2 * 109 1.根據(jù)題目給出

    2024年02月11日
    瀏覽(19)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 10- I. 斐波那契數(shù)列 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 10- I. 斐波那契數(shù)列 ——【Leetcode每日一題】

    難度:簡(jiǎn)單 寫(xiě)一個(gè)函數(shù),輸入 n ,求斐波那契(Fibonacci)數(shù)列的第 n 項(xiàng)(即 F(N) )。斐波那契數(shù)列的定義如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N 1. 斐波那契數(shù)列由 0 和 1 開(kāi)始,之后的斐波那契數(shù)就是由之前的兩數(shù)相加而得出。 答案需要取模 1e9+7(1000000007),如計(jì)

    2024年02月12日
    瀏覽(20)
  • 動(dòng)態(tài)規(guī)劃——地下城游戲

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

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

    2024年02月11日
    瀏覽(28)
  • 【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    2024-1-11 2645. 構(gòu)造有效字符串的最少插入數(shù) 方法一:計(jì)算組數(shù) 1.用count統(tǒng)計(jì),能構(gòu)成幾組abc 2.如果當(dāng)前字符大于之前字符,說(shuō)明還在組內(nèi),不更新 3.如果當(dāng)前字符小于等于之前字符,說(shuō)明不是同一組的abc,組數(shù)更新 4.最終返回值:組數(shù)*3,再減去原本的字符數(shù),就是要插入的次數(shù)

    2024年01月17日
    瀏覽(23)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長(zhǎng)不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長(zhǎng)不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    難度:中等 請(qǐng)從字符串中找出一個(gè)最長(zhǎng)的不包含重復(fù)字符的子字符串,計(jì)算該最長(zhǎng)子字符串的長(zhǎng)度。 示例 1: 輸入: “abcabcbb” 輸出: 3 解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 “abc”,所以其長(zhǎng)度為 3。 示例 2: 輸入: “bbbbb” 輸出: 1 解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 “b”,所

    2024年02月11日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包