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

第九章 動態(tài)規(guī)劃part04(● 01背包問題,你該了解這些! ● 01背包問題,你該了解這些! 滾動數(shù)組 ● 416. 分割等和子集 )

這篇具有很好參考價值的文章主要介紹了第九章 動態(tài)規(guī)劃part04(● 01背包問題,你該了解這些! ● 01背包問題,你該了解這些! 滾動數(shù)組 ● 416. 分割等和子集 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學習目標:

● 01背包問題,你該了解這些!
● 01背包問題,你該了解這些! 滾動數(shù)組
● 416. 分割等和子集


學習內(nèi)容:● 01背包問題,你該了解這些!

https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html
視頻講解:https://www.bilibili.com/video/BV1cg411g7Y6
第九章 動態(tài)規(guī)劃part04(● 01背包問題,你該了解這些! ● 01背包問題,你該了解這些! 滾動數(shù)組 ● 416. 分割等和子集 ),算法筆記,動態(tài)規(guī)劃,算法
1.確定dp數(shù)組以及下標的含義
i是物品,j是背包容量。
dp[i][j] 表示從下標為[0-i]的物品里任意取,放進容量為j的背包,價值總和最大是多少。
2.遞推公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
3.初始化:第九章 動態(tài)規(guī)劃part04(● 01背包問題,你該了解這些! ● 01背包問題,你該了解這些! 滾動數(shù)組 ● 416. 分割等和子集 ),算法筆記,動態(tài)規(guī)劃,算法
4.確定遍歷順序:都可以,但是先遍歷物品更好理解。

好難啊,比讀不懂題更顯呆
/**
     * 動態(tài)規(guī)劃獲得結果
     * @param weight  物品的重量
     * @param value   物品的價值
     * @param size    背包的容量
     */
function testWeightBagProblem (weight, value, size) {
	// 獲取物品的數(shù)量
    const len = weight.length
    const dp = Array(len).fill().map(()=>Array(size+1).fill(0))
    // 初始化dp數(shù)組
    for(let j=weight[0];j<=size;j++){
        dp[0][j]=value[0]
    }
    for(let i=1;i<len;i++){
        for(let j=1;j<=size;j++){
            if(j<weight[i]){
            /**
                     * 當前背包的容量都沒有當前物品i大的時候,是不放物品i的
                     * 那么前i-1個物品能放下的最大價值就是當前情況的最大價值
              */
                dp[i][j] = dp[i-1][j]
            }else{
             /**
                     * 當前背包的容量可以放下物品i
                     * 那么此時分兩種情況:
                     *    1、不放物品i
                     *    2、放物品i
                     * 比較這兩種情況下,哪種背包中物品的最大價值最大
                     */
                dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])
            }
            
        }
    }
    return dp[len-1][size]
}
function test () {
    console.log(testWeightBagProblem([2, 2 ,3 ,1 ,5, 2], [2 ,3 ,1 ,5 ,4 ,3], 6));
}
test();

學習內(nèi)容:01背包問題,你該了解這些! 滾動數(shù)組

https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-2.html
視頻講解:https://www.bilibili.com/video/BV1BU4y177kY
一維數(shù)組
1.確定dp數(shù)組的定義
在一維dp數(shù)組中,dp[j]表示:容量為j的背包,所背的物品價值可以最大為dp[j]。
2.公式dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);可以看出相對于二維dp數(shù)組的寫法,就是把dp[i][j]中i的維度去掉了。
3.一維dp數(shù)組如何初始化,初始化為0
4.一維dp數(shù)組遍歷順序:背包遍歷倒序遍歷是為了保證物品i只被放入一次!
為什么二維dp數(shù)組遍歷的時候不用倒序呢?
因為對于二維dp,dp[i][j]都是通過上一層即dp[i - 1][j]計算而來,本層的dp[i][j]并不會被覆蓋!
先遍歷物品嵌套遍歷背包容量
那可不可以先遍歷背包容量嵌套遍歷物品呢?
不可以!
因為一維dp的寫法,背包容量一定是要倒序遍歷,如果遍歷背包容量放在上一層,那么每個dp[j]就只會放入一個物品,即:背包里只放入了一個物品。
倒序遍歷的原因是,本質(zhì)上還是一個對二維數(shù)組的遍歷,并且右下角的值依賴上一層左上角的值,因此需要保證左邊的值仍然是上一層的,從右向左覆蓋。

function testWeightBagProblem (weight, value, size) {
    const len = weight.length
    const dp = Array(size+1).fill(0)
    for(let i=1;i<=len;i++){
        for(let j=size;j>= wight[i - 1];j--){
           dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);       
        }
    }
    return dp[size]
}
function test () {
    console.log(testWeightBagProblem([2, 2 ,3 ,1 ,5, 2], [2 ,3 ,1 ,5 ,4 ,3], 6));
}
test();

學習內(nèi)容:● 416. 分割等和子集

https://programmercarl.com/0416.%E5%88%86%E5%89%B2%E7%AD%89%E5%92%8C%E5%AD%90%E9%9B%86.html
視頻講解:https://www.bilibili.com/video/BV1rt4y1N7jE
1.確定dp數(shù)組以及下標的含義
01背包中,dp[j] 表示: 容量為j的背包,所背的物品價值最大可以為dp[j]。
套到本題,dp[j]表示 背包總容量(所能裝的總重量)是j,放進物品后,背的最大重量為dp[j]。
2.遞推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
3.初始化:dp[0]=0
4.遍歷順序:如果使用一維dp數(shù)組,物品遍歷的for循環(huán)放在外層,遍歷背包的for循環(huán)放在內(nèi)層,且內(nèi)層for循環(huán)倒序遍歷!文章來源地址http://www.zghlxwxcb.cn/news/detail-792777.html

兩字:不會!
var canPartition = function(nums) {
    const sum = (nums.reduce((p, v) => p + v));
    if (sum & 1) return false;
    const dp = Array(sum / 2 + 1).fill(0);
    for(let i = 0; i < nums.length; i++) {
        for(let j = sum / 2; j >= nums[i]; j--) {
            dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);
            if (dp[j] === sum / 2) {
                return true;
            }
        }
    }
    return dp[sum / 2] === sum / 2;
};

到了這里,關于第九章 動態(tài)規(guī)劃part04(● 01背包問題,你該了解這些! ● 01背包問題,你該了解這些! 滾動數(shù)組 ● 416. 分割等和子集 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 動態(tài)規(guī)劃day04(01背包問題)

    01背包問題(二維數(shù)組和滾動數(shù)組) 本題力扣上沒有原題,大家可以去卡碼網(wǎng)第46題?(opens new window)去練習,題意是一樣的。 《代碼隨想錄》算法視頻公開課?(opens new window):帶你學透0-1背包問題!?(opens new window),相信結合視頻再看本篇題解,更有助于大家對本題的理解 。 這周

    2024年01月18日
    瀏覽(19)
  • 【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part03 343. 整數(shù)拆分 96.不同的二叉搜索樹 (day41補)

    【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part03 343. 整數(shù)拆分 96.不同的二叉搜索樹 (day41補)

    給定一個正整數(shù)? n ?,將其拆分為 k 個 正整數(shù) 的和(? k = 2 ?),并使這些整數(shù)的乘積最大化。 返回 你可以獲得的最大乘積 ?。 示例 1: 示例?2: 提示: 2 = n = 58 看到這道題目,都會想拆成兩個呢,還是三個呢,還是四個.... 我們來看一下如何使用動規(guī)來解決。 # 動態(tài)規(guī)劃 動

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

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

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

    2024年02月06日
    瀏覽(123)
  • 【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part06 完全背的講解 518. 零錢兌換 II 377. 組合總和 Ⅳ (day44補)

    【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part06 完全背的講解 518. 零錢兌換 II 377. 組合總和 Ⅳ (day44補)

    # 完全背包 有N件物品和一個最多能背重量為W的背包。第i件物品的重量是weight[i],得到的價值是value[i] 。 每件物品都有無限個(也就是可以放入背包多次) ,求解將哪些物品裝入背包里物品價值總和最大。 完全背包和01背包問題唯一不同的地方就是,每種物品有無限件 。

    2024年02月09日
    瀏覽(28)
  • 【LeetCode題目詳解】第九章 動態(tài)規(guī)劃 part05 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零(day43補)

    【LeetCode題目詳解】第九章 動態(tài)規(guī)劃 part05 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零(day43補)

    有一堆石頭,用整數(shù)數(shù)組? stones 表示。其中? stones[i] 表示第 i 塊石頭的重量。 每一回合,從中選出 任意兩塊石頭 ,然后將它們一起粉碎。假設石頭的重量分別為? x 和? y ,且? x = y 。那么粉碎的可能結果如下: 如果? x == y ,那么兩塊石頭都會被完全粉碎; 如果? x != y

    2024年02月09日
    瀏覽(25)
  • 【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part09 198.打家劫舍 213.打家劫舍II 337.打家劫舍III(day48補)

    【LeetCode題目詳解】第九章 動態(tài)規(guī)劃part09 198.打家劫舍 213.打家劫舍II 337.打家劫舍III(day48補)

    你是一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng), 如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警 。 給定一個代表每個房屋存放金額的非負整數(shù)數(shù)組,計算你 不觸動

    2024年02月09日
    瀏覽(34)
  • Leetcoder Day39| 動態(tài)規(guī)劃part06 完全背包問題

    Leetcoder Day39| 動態(tài)規(guī)劃part06 完全背包問題

    有N件物品和一個最多能背重量為W的背包。第i件物品的重量是weight[i],得到的價值是value[i] 。 每件物品都有無限個(也就是可以放入背包多次) ,求解將哪些物品裝入背包里物品價值總和最大。 示例: 背包最大重量為4。 物品為: 重量 價值 物品0 1 15 物品1 3 20 物品2 4 30 每

    2024年03月25日
    瀏覽(23)
  • 【動態(tài)規(guī)劃專欄】-- 01 背包問題 -- 動態(tài)規(guī)劃經(jīng)典題型

    【動態(tài)規(guī)劃專欄】-- 01 背包問題 -- 動態(tài)規(guī)劃經(jīng)典題型

    目錄 背包問題概述 01 背包問題 01背包??? 【算法原理】 第一問 第二問 C++ 算法代碼 復雜度分析 【空間優(yōu)化 - 滾動數(shù)組】 C++ 算法代碼 復雜度分析 分割等和子集?? 【算法原理】? 對于類01背包問題 C++ 算法代碼? 【空間優(yōu)化 - 滾動數(shù)組】? C++ 算法代碼 目標和?? 【算

    2024年02月05日
    瀏覽(21)
  • 動態(tài)規(guī)劃(01背包問題)

    動態(tài)規(guī)劃(01背包問題)

    本文默認讀者具有動態(tài)規(guī)劃前置知識 動態(tài)規(guī)劃的特點: 重疊子問題 狀態(tài)轉移方程 最優(yōu)子結構 題型: 求最值 解題套路: 明確【狀態(tài)】 明確【選擇】 明確dp函數(shù)/數(shù)據(jù)的定義 明確base case 例:給你一個可裝載容量為W的背包和N個物品,每個物品有重量和價值兩個屬性。其中第

    2024年04月16日
    瀏覽(23)
  • 動態(tài)規(guī)劃:01背包問題(二)

    動態(tài)規(guī)劃:01背包問題(二)

    上篇博客動態(tài)規(guī)劃:01背包問題(一)將的是用二維數(shù)組來解決,而本篇博客就是把二維dp數(shù)組降為一維dp數(shù)組(滾動數(shù)組)在使用二維數(shù)組的時候,遞推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 其實可以發(fā)現(xiàn)如果 把dp[i - 1]那一層拷貝到dp[i]上 ,表達式完全可以是

    2024年01月22日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包