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

代碼隨想錄打卡—day41—【DP】— 8.26+27 DP基礎(chǔ)3

這篇具有很好參考價(jià)值的文章主要介紹了代碼隨想錄打卡—day41—【DP】— 8.26+27 DP基礎(chǔ)3。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1?343. 整數(shù)拆分

343.?整數(shù)拆分

一開(kāi)始做?沒(méi)有思路,學(xué)習(xí)了題解才,ac代碼:

class Solution {
public:
    int dp[60];  // 含義:i 把它拆分成若干個(gè)數(shù),這些數(shù)的乘積最大的值
    /*
    很妙這里j的含義 ,如果是我直覺(jué)會(huì)用k作為其中一個(gè)循環(huán) 但不知道是不是要三個(gè)循環(huán)...
    j的含義i的拆分因子: 因?yàn)閗大于等于2 所以至少兩個(gè)因子 所以 j = 1,...,i-1
    dp[i] = max(dp[i], max(j*(i-j) , dp[i-j]*j))
                        拆分成兩個(gè)  拆分2個(gè)以上
    dp[2] = 1;
    i++


    2 3 4 5 6
    1 2 4 
    */
    int integerBreak(int n) 
    {
        dp[2] = 1;
        if(n == 2)return dp[2];

        for(int i = 3; i <= n; i++)
            for(int j = 1; j <= i-1;j++)
                dp[i] = max(dp[i], max(j*(i-j) , dp[i-j]*j));
                
        return dp[n];

    }
};

后來(lái)仔細(xì)看題解,其實(shí) for - j?的次數(shù)可以?xún)?yōu)化——


注意 枚舉j的時(shí)候,是從1開(kāi)始的。從0開(kāi)始的話(huà),那么讓拆分一個(gè)數(shù)拆個(gè)0,求最大乘積就沒(méi)有意義了。

優(yōu)化1:

j 的結(jié)束條件是 j < i - 1 ,其實(shí) j < i 也是可以的,不過(guò)可以節(jié)省一步,例如讓j = i - 1,的話(huà),其實(shí)在 j = 1的時(shí)候,這一步就已經(jīng)拆出來(lái)了,重復(fù)計(jì)算,所以 j < i - 1

至于 i是從3開(kāi)始,這樣dp[i - j]就是dp[2]正好可以通過(guò)我們初始化的數(shù)值求出來(lái)。

優(yōu)化2: 更優(yōu)化一步,可以這樣:

for (int i = 3; i <= n ; i++) {
    for (int j = 1; j <= i / 2; j++) {
        dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
    }
}

因?yàn)?span style="color:#fe2c24;">拆分一個(gè)數(shù)n 使之乘積最大,那么一定是拆分成m個(gè)近似相同的子數(shù)相乘才是最大的。

例如 6 拆成 3 * 3, 10 拆成 3 * 3 * 4。 100的話(huà) 也是拆成m個(gè)近似數(shù)組的子數(shù) 相乘才是最大的。

只不過(guò)我們不知道m(xù)究竟是多少而已,但可以明確的是m一定大于等于2,既然m大于等于2,也就是 最差也應(yīng)該是拆成兩個(gè)相同的 可能是最大值。

那么 j 遍歷,只需要遍歷到 n/2 就可以,后面就沒(méi)有必要遍歷了,一定不是最大值。

至于 “拆分一個(gè)數(shù)n 使之乘積最大,那么一定是拆分成m個(gè)近似相同的子數(shù)相乘才是最大的” 這個(gè)我就不去做數(shù)學(xué)證明了,感興趣的同學(xué),可以自己證明。


題解的貪心做法:

本題也可以用貪心,每次拆成n個(gè)3,如果剩下是4,則保留4,然后相乘,但是這個(gè)結(jié)論需要數(shù)學(xué)證明其合理性!

2?96. 不同的二叉搜索樹(shù)

96.?不同的二叉搜索樹(shù)

看到題目一開(kāi)始又是懵的,看了題解才知道從n=1 n=2 到n=3可以借助前n=1,n=2推出來(lái),找到規(guī)律,AC代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-676272.html

class Solution {
public:
    int dp[20];  // 恰由i個(gè)節(jié)點(diǎn)組成的不同的二叉線索樹(shù)最大的數(shù)目
    /*
    dp[0] = 0;
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = dp[0]*dp[2] + dp[1]*dp[1] + dp[2]*dp[0]

    for(int j = 1; j <= i; j++)
        dp[i] += dp[j-1]*dp[n-j];
    
    i++

    0 1 2 3 4
    0 1 2 5 

    */
    int numTrees(int n) 
    {
        dp[0] = 1;  // 沒(méi)有實(shí)際含義 為了湊結(jié)果的
        dp[1] = 1;
        dp[2] = 2;

        for(int i = 3; i <= n; i++)
            for(int j = 1;j <= i; j++)
                dp[i] += dp[j-1]*dp[i-j];
        
        return dp[n];
    }
};

到了這里,關(guān)于代碼隨想錄打卡—day41—【DP】— 8.26+27 DP基礎(chǔ)3的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • day78【代碼隨想錄】區(qū)間DP專(zhuān)題

    day78【代碼隨想錄】區(qū)間DP專(zhuān)題

    1、多邊形三角剖分的最低得分 2、猜數(shù)字大小 II 3、讓字符串成為回文串的最少插入次數(shù) 4、切棍子的最小成本 5、戳氣球 6、合并石頭的最低成本 分析: 大佬詳細(xì)題解 分析: 這一段題解是靈魂! 大佬題解 類(lèi)似于算法書(shū)中的矩陣連乘問(wèn)題 分析: 跟判斷回文串思路一樣,但是

    2023年04月13日
    瀏覽(95)
  • 代碼隨想錄Day41-圖論:力扣第797m、200m、695m、1020m、130m題

    題目鏈接 代碼隨想錄文章講解鏈接 方法一:DFS 用時(shí):11m43s 思路 時(shí)間復(fù)雜度: O ( n ? 2 n ) O(n cdot 2^n) O ( n ? 2 n ) ,n是節(jié)點(diǎn)個(gè)數(shù),最壞情況每個(gè)節(jié)點(diǎn)都可以去往任意一個(gè)在它后面的節(jié)點(diǎn),那么第i個(gè)節(jié)點(diǎn)去到最后一個(gè)節(jié)點(diǎn)的路徑數(shù)就有 2 n ? i ? 2 2^{n-i-2} 2 n ? i ? 2 ,就是

    2024年02月06日
    瀏覽(24)
  • 【代碼隨想錄打卡】快慢指針

    力扣鏈接:?力扣 給你一個(gè)數(shù)組 nums?和一個(gè)值 val,你需要 原地 移除所有數(shù)值等于?val?的元素,并返回移除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。 元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。

    2024年02月12日
    瀏覽(20)
  • 代碼隨想錄打卡第35天

    2024年02月12日
    瀏覽(19)
  • 代碼隨想錄打卡第34天

    2024年02月11日
    瀏覽(21)
  • 代碼隨想錄補(bǔ)打卡 56 合并區(qū)間

    56 合并區(qū)間? 代碼如下 func?merge(intervals?[][]int)?[][]int?{ ????????sort.Slice(intervals,func(i,j?int)bool{? //將數(shù)組按左邊界的大小排序 ????????return?intervals[i][0]intervals[j][0] ????}) ????res?:=?make([][]int,0) //定義一個(gè)目標(biāo)數(shù)組 ????res?=?append(res,intervals[0])? //先將數(shù)組的第

    2024年02月02日
    瀏覽(86)
  • 代碼隨想錄第41天 | 動(dòng)態(tài)規(guī)劃part03

    代碼隨想錄第41天 | 動(dòng)態(tài)規(guī)劃part03

    ● 343. 整數(shù)拆分 ● 96.不同的二叉搜索樹(shù) 題目一 343. 整數(shù)拆分 給定一個(gè)正整數(shù) n,將其拆分為至少兩個(gè)正整數(shù)的和,并使這些整數(shù)的乘積最大化。 返回你可以獲得的最大乘積。 示例 : 輸入: 10 輸出: 36 解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 說(shuō)明: 你可以假設(shè) n 不小于 2 且不大于 5

    2024年01月24日
    瀏覽(26)
  • 代碼隨想錄打卡第56天|583. 兩個(gè)字符串的刪除操作;72. 編輯距離

    583. 兩個(gè)字符串的刪除操作 關(guān)鍵點(diǎn)1:dp數(shù)組的含義 dp[i][j],使得以i-1為結(jié)尾word1 和 以j-1為結(jié)尾的word2 相同所需的最小步數(shù); 關(guān)鍵點(diǎn)2:遞歸公式的推導(dǎo) if(nums1[i-1] == nums2[j-1]),則i和j同時(shí)移動(dòng),所以為i-1,j-1;dp[i][j] = dp[i-1][j-1];由于不需要進(jìn)行刪除操作,所以不需要加1 如果不相

    2023年04月19日
    瀏覽(34)
  • 代碼隨想錄Day58

    昨天因?yàn)橹驹富顒?dòng)和筆試耽誤了一整天,今天繼續(xù)學(xué)習(xí)動(dòng)規(guī)解決子序列問(wèn)題。 給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個(gè)子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對(duì)位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一個(gè)子序列,

    2023年04月27日
    瀏覽(97)
  • 代碼隨想錄Day62

    今天繼續(xù)學(xué)習(xí)單調(diào)棧解決相關(guān)問(wèn)題。 nums1?中數(shù)字?x?的 下一個(gè)更大元素 是指?x?在?nums2 中對(duì)應(yīng)位置 右側(cè) 的 第一個(gè) 比?x?大的元素。 給你兩個(gè) 沒(méi)有重復(fù)元素 的數(shù)組?nums1 和?nums2 ,下標(biāo)從 0 開(kāi)始計(jì)數(shù),其中nums1?是?nums2?的子集。 對(duì)于每個(gè) 0 = i nums1.length ,找出滿(mǎn)足 nums1

    2024年02月01日
    瀏覽(100)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包