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

我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分

這篇具有很好參考價值的文章主要介紹了我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

??博客介紹`: 27dCnc

??系列專欄: <<數(shù)據(jù)結(jié)構(gòu)與算法>> << 算法入門>> << C++項目>>

?? 當(dāng)前專欄: << 算法入門>>

專題 : 數(shù)據(jù)結(jié)構(gòu)幫助小白快速入門算法
????????????????????????
☆*: .?. o(≧▽≦)o .?.:*☆

??感謝大家點贊??收藏?評論??

我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

學(xué)習(xí)目標(biāo):

今日學(xué)習(xí)打卡
我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

  • 代碼隨想錄 - 動態(tài)規(guī)劃

學(xué)習(xí)時間:

  • 周一至周五晚上 7 點—晚上9點
  • 周六上午 9 點-上午 11 點
  • 周日下午 3 點-下午 6 點

學(xué)習(xí)內(nèi)容:

  1. 不同路徑
  2. 不同路徑 II
  3. 整數(shù)拆分

內(nèi)容詳細(xì):

62.不同路徑

考點: 動態(tài)規(guī)劃 數(shù)學(xué) 深度優(yōu)先搜索(dfs)
我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法
解題思路
高中時候的組合規(guī)律,當(dāng)然我們不能直接這樣寫我們要進(jìn)行動態(tài)規(guī)劃分析

首先看到題目是想到dfs

class Solution {
private:
    int dfs(int i, int j, int m, int n) {
        if (i > m || j > n) return 0; // 越界了
        if (i == m && j == n) return 1; // 找到一種方法,相當(dāng)于找到了葉子節(jié)點
        return dfs(i + 1, j, m, n) + dfs(i, j + 1, m, n);
    }
public:
    int uniquePaths(int m, int n) {
        return dfs(1, 1, m, n);
    }
};

但是超時

開始動態(tài)規(guī)劃

  1. 確定dp數(shù)組以及下標(biāo)的含義
dp[i][j] :表示從(00)出發(fā),到(i, j) 有dp[i][j]條不同的路徑。
  1. 確定遞推公式(到這一步的方式)

想要求dp[i][j],只能有兩個方向來推導(dǎo)出來,即dp[i - 1][j] 和 dp[i][j - 1]。

此時在回顧一下 dp[i - 1][j] 表示啥,是從(0, 0)的位置到(i - 1, j)有幾條路徑,dp[i][j - 1]同理。

那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因為dp[i][j]只有這兩個方向過來。

  1. dp數(shù)組的初始化
    這個就是高中的知識點
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;
  1. 確定遍歷順序
    這里要看一下遞推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是從其上方和左方推導(dǎo)而來,那么從左到右一層一層遍歷就可以了。

這樣就可以保證推導(dǎo)dp[i][j]的時候,dp[i - 1][j] 和 dp[i][j - 1]一定是有數(shù)值的。

  1. 舉例推導(dǎo)dp數(shù)組
    我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法
    最終代碼
class Solution {
public:
    int uniquePaths(int m, int n) {
        int dp[m][n];
        dp[0][0] = 0;
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int j = 0; j < n; j++) dp[0][j] = 1;
        for (int i = 1;i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
};

63. 不同路徑 II

題目考點: 動態(tài)規(guī)劃

我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

解題思路
和上一題一樣,只是多了障礙物,可以直接跳過,
如果遇到障礙物 continue

if (obstacleGrid[i][j] == 1) {continue;}

i 代碼

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int l,r;
        int m =obstacleGrid.size();
        int n = obstacleGrid[0].size();
        int dp[m][n];
        if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1){
            return 0;
        }
        memset(dp,0,sizeof(dp));
        for (int i = 0; i < m && !obstacleGrid[i][0]; i++) dp[i][0] = 1;
        for (int j = 0; j < n && !obstacleGrid[0][j]; j++) dp[0][j] = 1;
        for (int i = 1;i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1) {continue;}
                dp[i][j] = dp[i-1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
};

ii 代碼

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        if (obstacleGrid[0][0] == 1)
            return 0;
        vector<int> dp(obstacleGrid[0].size());
        for (int j = 0; j < dp.size(); ++j)
            if (obstacleGrid[0][j] == 1)
                dp[j] = 0;
            else if (j == 0)
                dp[j] = 1;
            else
                dp[j] = dp[j-1];

        for (int i = 1; i < obstacleGrid.size(); ++i)
            for (int j = 0; j < dp.size(); ++j){
                if (obstacleGrid[i][j] == 1)
                    dp[j] = 0;
                else if (j != 0)
                    dp[j] = dp[j] + dp[j-1];
            }
        return dp.back();
    }
};

343. 整數(shù)拆分

題目考點: 動態(tài)規(guī)劃
我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

解題思路

可以拆分成多個數(shù)據(jù)對動態(tài)規(guī)劃實行貪心,max就是貪心的具象化,(個人理解)

其他步驟省,這里詳細(xì)講解

  • 確定遞推公式

可以想 dp[i]最大乘積是怎么得到的呢?

其實可以從1遍歷j,然后有兩種渠道得到dp[i].

一個是j * (i - j) 直接相乘。

一個是j * dp[i - j],相當(dāng)于是拆分(i - j),對這個拆分不理解的話,可以回想dp數(shù)組的定義。

那有同學(xué)問了,j怎么就不拆分呢?

j是從1開始遍歷,拆分j的情況,在遍歷j的過程中其實都計算過了。那么從1遍歷j,比較(i - j) * j和dp[i - j] * j 取最大的。
遞推公式:

dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));

也可以這么理解,j * (i - j) 是單純的把整數(shù)拆分為兩個數(shù)相乘,而j * dp[i - j]是拆分成兩個以及兩個以上的個數(shù)相乘。

  • 如果定義dp[i - j] * dp[j] 也是默認(rèn)將一個數(shù)強(qiáng)制拆成4份以及4份以上了。

  • 所以遞推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});

  • 那么在取最大值的時候,為什么還要比較dp[i]呢?

因為在遞推公式推導(dǎo)的過程中,每次計算dp[i],取最大的而已。

class Solution {
public:
    int integerBreak(int n) {
        if(n < 4) return n/2 * (n - n/2);
        int dp[n+4];
        memset(dp,0,sizeof dp);
        dp[2] = 1;
        for (int i = 3; i <= n ; i++) {
            for (int j = 1; j <= i / 2; j++) {
                dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});
            }
        }
        return dp[n];
    }
};

學(xué)習(xí)產(chǎn)出:

  • 技術(shù)筆記 2 遍
  • CSDN 技術(shù)博客 3 篇
  • 習(xí)的 vlog 視頻 1 個

我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分,數(shù)據(jù)結(jié)構(gòu)與算法,動態(tài)規(guī)劃,代理模式,算法

重磅消息:

GTP - 4 最新版接入服務(wù)他來了 點擊鏈接即可查看詳細(xì)

GTP - 4 搭建教程

??如果此文對你有幫助的話,歡迎??關(guān)注、??點贊、?收藏、??評論,支持一下博主~文章來源地址http://www.zghlxwxcb.cn/news/detail-838681.html

到了這里,關(guān)于我在代碼隨想錄|寫代碼Day33 | 動態(tài)規(guī)劃| 路徑問題| 62.不同路徑,63. 不同路徑 II,343. 整數(shù)拆分的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Day39 代碼隨想錄(1刷) 動態(tài)規(guī)劃 0-1背包

    題目描述 小明是一位科學(xué)家,他需要參加一場重要的國際科學(xué)大會,以展示自己的最新研究成果。他需要帶一些研究材料,但是他的行李箱空間有限。這些研究材料包括實驗設(shè)備、文獻(xiàn)資料和實驗樣本等等,它們各自占據(jù)不同的空間,并且具有不同的價值。? 小明的行李空間

    2024年04月23日
    瀏覽(32)
  • 【Day52】代碼隨想錄之動態(tài)規(guī)劃_打家劫舍

    動態(tài)規(guī)劃理論基礎(chǔ) 動規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 打印。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。 打印dp日志和

    2024年02月22日
    瀏覽(28)
  • 【Day42】代碼隨想錄之動態(tài)規(guī)劃0-1背包_416. 分割等和子集

    【Day42】代碼隨想錄之動態(tài)規(guī)劃0-1背包_416. 分割等和子集

    動態(tài)規(guī)劃理論基礎(chǔ) 動規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 推導(dǎo)dp數(shù)組。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。 打印

    2024年02月20日
    瀏覽(97)
  • 【Day45】代碼隨想錄之動態(tài)規(guī)劃part7—爬樓梯(進(jìn)階)、零錢兌換、完全平方數(shù)

    【Day45】代碼隨想錄之動態(tài)規(guī)劃part7—爬樓梯(進(jìn)階)、零錢兌換、完全平方數(shù)

    今天又是補(bǔ)打卡的一天,開沖?。?! 今日任務(wù): 70.爬樓梯(進(jìn)階) 322.零錢兌換 279.完全平方數(shù) 這道題之前做過一次,但是可以采用完全背包的問題來分析一遍。 卡瑪網(wǎng)題目:【57.爬樓梯】 這個題目其實是更難了一點,因為前面的題目都是每次要不爬1階樓梯,要不爬2階樓

    2024年03月25日
    瀏覽(33)
  • 【Day53】代碼隨想錄之動態(tài)規(guī)劃part10——買賣股票的最佳時機(jī)、買賣股票的最佳時機(jī)II

    【Day53】代碼隨想錄之動態(tài)規(guī)劃part10——買賣股票的最佳時機(jī)、買賣股票的最佳時機(jī)II

    昨天已經(jīng)把打家劫舍的問題解決了,最后一個題目涉及到樹形dp比較難(等到二刷的時候再重點看下),今天的任務(wù)是解決股票問題。 今日任務(wù): 121.買賣股票的最佳時機(jī) 122.買賣股票的最佳時機(jī)II Leetcode題目:【121.買賣股票的最佳時機(jī)】 因為此題中買賣股票只能買賣一次。

    2024年03月15日
    瀏覽(33)
  • 代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    說到背包問題大家都會想到使用動規(guī)的方式來求解,那么為什么用動規(guī)呢, dp數(shù)組代表什么呢 ? 初始化是什么 , 遍歷方式又是什么 ,這篇文章筆者將詳細(xì)講解背包問題的經(jīng)典例題0-1背包問題和完全背包問題的解題方式,希望能幫助到大家 有人一提到背包問題就只會使用動態(tài)規(guī)劃來

    2024年02月06日
    瀏覽(124)
  • 我在代碼隨想錄|寫代碼Day7之454.四數(shù)相加II ,? 383. 贖金信?,? 15. 三數(shù)之和?

    我在代碼隨想錄|寫代碼Day7之454.四數(shù)相加II ,? 383. 贖金信?,? 15. 三數(shù)之和?

    題目 ?解題思路 四個數(shù)字相加的和為0,我們要選倆數(shù)組,讓他們的笛卡爾積儲存在哈希表中,然后我們要找的是這倆數(shù)和的相反數(shù),然后就是將后面?zhèn)z數(shù)組相加在后面的數(shù)組和中找相反數(shù). ? 解題思路 題目意思是讓在字符串1中找到字母組成字符串2所以找字符串1的數(shù)量.所以可以用

    2024年01月20日
    瀏覽(27)
  • 【Day43】代碼隨想錄之動態(tài)規(guī)劃0-1背包_1049. 最后一塊石頭的重量 II_494. 目標(biāo)和_ 474.一和零

    動態(tài)規(guī)劃理論基礎(chǔ) 動規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 打印。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。 打印dp日志和

    2024年02月22日
    瀏覽(24)
  • 代碼隨想錄Day32 動態(tài)規(guī)劃01 LeetCodeT509 斐波那契數(shù)列 T70 爬樓梯 T746 爬樓梯的最小消耗

    代碼隨想錄Day32 動態(tài)規(guī)劃01 LeetCodeT509 斐波那契數(shù)列 T70 爬樓梯 T746 爬樓梯的最小消耗

    動態(tài)規(guī)劃首先可以解決的問題有背包問題,打家劫舍問題,股票問題,子序列問題等,主要是將一個大的問題切分成多個重疊的子問題,所以動態(tài)規(guī)劃一定是上一個狀態(tài)遞推過來的,有一個重要的 狀態(tài)轉(zhuǎn)移方程, 但是這也并不是解題的全部,我們將動態(tài)規(guī)劃的題目基本分為五步來完成

    2024年02月06日
    瀏覽(88)
  • 代碼隨想錄Day36 動態(tài)規(guī)劃05 LeetCode T1049最后一塊石頭的重量II T494 目標(biāo)和 T474 一和零

    代碼隨想錄Day36 動態(tài)規(guī)劃05 LeetCode T1049最后一塊石頭的重量II T494 目標(biāo)和 T474 一和零

    理論基礎(chǔ)? :?代碼隨想錄Day34 LeetCode T343整數(shù)拆分 T96 不同的二叉搜索樹-CSDN博客 1.明白dp數(shù)組的含義 2.明白遞推公式的含義 3.初始化dp數(shù)組 4.注意dp數(shù)組的遍歷順序 5.打印dp數(shù)組排錯 題目鏈接:1049. 最后一塊石頭的重量 II - 力扣(LeetCode) 這題我們?nèi)匀徊捎脛右?guī)五部曲來寫,這題和

    2024年02月06日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包