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

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

這篇具有很好參考價值的文章主要介紹了動態(tài)規(guī)劃(01背包問題)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文默認讀者具有動態(tài)規(guī)劃前置知識


  • 動態(tài)規(guī)劃的特點:
  1. 重疊子問題
  2. 狀態(tài)轉(zhuǎn)移方程
  3. 最優(yōu)子結(jié)構(gòu)
  • 題型:求最值
  • 解題套路:
  1. 明確【狀態(tài)】
  2. 明確【選擇】
  3. 明確dp函數(shù)/數(shù)據(jù)的定義
  4. 明確base case

  • 例:給你一個可裝載容量為W的背包和N個物品,每個物品有重量和價值兩個屬性。其中第i個物品的重量為wt[i],價值為va[i],現(xiàn)在讓你用這個背包裝物品,最多能裝的價值是多少?
  • 在這里將問題具體化:現(xiàn)在有4 (N=4)個物品,背包總?cè)萘繛?strong>8 (W=8),背包最多能裝入價值為多少的物品?
物體編號 物體體積 物體價值
1 2 3
2 3 4
3 4 5
4 5 6
  • 第一步,明確狀態(tài)和選擇

  • 狀態(tài):背包的空余容量剩多少;可選擇的物品還有哪些

  • 選擇:把這個物品裝進背包;把這個物品裝進背包

  • 第二步,明確dp數(shù)組的定義:對于前1個物品,當(dāng)背包的容量為w時,可以裝的最大價值是 dp[i][w]

  • 比如說,dp[4][8]=10的含義為:
    對于給定的一系列物品中,若只對前4個物品進行選擇,當(dāng)背包容量為8時,最多可以裝下的價值為10。

  • 根據(jù)此定義,還可得出:base case為dp[0][…] = dp[…][0] =0(編號為0,不裝物品;容量為0,裝不下任何物體),我們想計算的結(jié)果是 dp[N][W]
    01背包動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃,算法,背包問題,最長上升子序列,數(shù)據(jù)結(jié)構(gòu)

  • 背包容量為1,物品編號可選為1,通過上表可知,物品編號為1時物品體積為2,所以此時選擇不裝任何物品。

  • 背包容量為2,物品編號可選為1,裝入則價值為3。依次往后填充該行。01背包動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃,算法,背包問題,最長上升子序列,數(shù)據(jù)結(jié)構(gòu)

  • 背包容量為3,物品編號可選為1、2時,裝入編號為2的物品,此時價值為4。

  • 背包容量為5,物品編號可選為1、2時,裝入編號為1和2的物品,此時價值為7。

  • 依次往后填充完該表格
    01背包動態(tài)規(guī)劃,數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃,算法,背包問題,最長上升子序列,數(shù)據(jù)結(jié)構(gòu)

  • 第三步,根據(jù)[選擇]寫出狀態(tài)轉(zhuǎn)移邏輯:在w的約束下,把物品i裝進背包,最大價值是多少;在w的約束下,不把物品i裝進背包,最大價值是多少?文章來源地址http://www.zghlxwxcb.cn/news/detail-853298.html

for(let i=1;i<=n;i++) {
    for(let v=w[i]; v<=c;v++) {
      dp[i][v] = Math.max(dp[i-1][v], dp[i-1][v-w[i]]+value[i])
    }
}

  • 背包問題完整求解代碼:
// 入?yún)⑹俏锲返膫€數(shù)和背包的容量上限,以及物品的重量和價值數(shù)組
function knapsack(n, c, w, value) {
    // dp是動態(tài)規(guī)劃的狀態(tài)保存數(shù)組
    const dp = (new Array(c+1)).fill(0)  
    // res 用來記錄所有組合方案中的最大值
    let res = -Infinity
    for(let i=1;i<=n;i++) {
        for(let v=c;v>=w[i];v--) {
            // 寫出狀態(tài)轉(zhuǎn)移方程
            dp[v] = Math.max(dp[v], dp[v-w[i]] + value[i])
            // 即時更新最大值
            if(dp[v] > res) {
                res = dp[v]
            }
        }
    }
    return res
}

  • 擴展 – 最長上升子序列模型
題目描述:給定一個無序的整數(shù)數(shù)組,找到其中最長上升子序列的長度。
示例:
輸入: [10,9,2,5,3,7,101,18]
輸出: 4
解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。
  • 代碼實現(xiàn)
/**
 * @param {number[]} nums
 * @return {number}
 */
// 入?yún)⑹且粋€數(shù)字序列
const lengthOfLIS = function(nums) {
  // 緩存序列的長度
  const len = nums.length  
  // 處理邊界條件
  if(!len) {
      return 0
  }
  // 初始化數(shù)組里面每一個索引位的狀態(tài)值
  const dp = (new Array(len)).fill(1)
  // 初始化最大上升子序列的長度為1
  let maxLen = 1 
  // 從第2個元素開始,遍歷整個數(shù)組
  for(let i=1;i<len;i++) {
      // 每遍歷一個新元素,都要“回頭看”,看看能不能延長原有的上升子序列
      for(let j=0;j<i;j++) {  
          // 若遇到了一個比當(dāng)前元素小的值,則意味著遇到了一個可以延長的上升子序列,故更新當(dāng)前元素索引位對應(yīng)的狀態(tài)
          if(nums[j]<nums[i]) {
              dp[i] = Math.max(dp[i], dp[j] + 1)  
          }
      }
      // 及時更新上升子序列長度的最大值
      if(dp[i] > maxLen) {
          maxLen = dp[i]
      }
  }
  // 遍歷完畢,最后到手的就是最大上升子序列的長度
  return maxLen
};

到了這里,關(guān)于動態(tài)規(guī)劃(01背包問題)的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 算法系列--動態(tài)規(guī)劃--背包問題(1)--01背包介紹

    算法系列--動態(tài)規(guī)劃--背包問題(1)--01背包介紹

    ??\\\"趁著年輕,做一些比較cool的事情\\\"?? 作者:Lvzi 文章主要內(nèi)容:算法系列–動態(tài)規(guī)劃–背包問題(1)–01背包介紹 大家好,今天為大家?guī)淼氖?算法系列--動態(tài)規(guī)劃--背包問題(1)--01背包介紹 背包問題是動態(tài)規(guī)劃中經(jīng)典的一類問題,經(jīng)常在筆試面試中出現(xiàn),是非常 具有區(qū)分度 的題

    2024年04月16日
    瀏覽(93)
  • 算法學(xué)習(xí)17-動態(tài)規(guī)劃01:背包問題

    算法學(xué)習(xí)17-動態(tài)規(guī)劃01:背包問題

    提示:以下是本篇文章正文內(nèi)容: 提示:這里對文章進行總結(jié): ??????

    2024年04月27日
    瀏覽(102)
  • 【動態(tài)規(guī)劃】01背包問題——算法設(shè)計與分析

    【動態(tài)規(guī)劃】01背包問題——算法設(shè)計與分析

    若超市允許顧客使用一個體積大小為13的背包,選擇一件或多件商品帶走,則如何選擇可以使得收益最高? 商品 價格 體積 啤酒 24 10 汽水 2 3 餅干 9 4 面包 10 5 牛奶 9 4 0-1 Knapsack Problem 輸入: quad - n n n 個商品組成集合 O O O ,每個商品有屬性價格 p i p_i p i ? 和體積 v i v_i v

    2024年02月04日
    瀏覽(85)
  • 算法分析與設(shè)計——動態(tài)規(guī)劃求解01背包問題

    算法分析與設(shè)計——動態(tài)規(guī)劃求解01背包問題

    假設(shè)有四個物品,如下圖,背包總?cè)萘繛?,求背包裝入哪些物品時累計的價值最多。 我們使用動態(tài)規(guī)劃來解決這個問題,首先使用一個表格來模擬整個算法的過程。 表格中的信息表示 指定情況下能產(chǎn)生的最大價值 。例如, (4, 8)表示在背包容量為8的情況下,前四個物品的最

    2024年02月04日
    瀏覽(93)
  • 【Java實現(xiàn)】動態(tài)規(guī)劃算法解決01背包問題

    【Java實現(xiàn)】動態(tài)規(guī)劃算法解決01背包問題

    1、問題描述: 一個旅行者有一個最多能裝m公斤的背包,現(xiàn)在有n中物品,每件的重量分別是W1、W2、……、Wn,每件物品的價值分別為C1、C2、……、Cn, 需要將物品放入背包中,要怎么樣放才能保證背包中物品的總價值最大? 2、動態(tài)規(guī)劃算法的概述 1)動態(tài)規(guī)劃(Dynamic Progra

    2023年04月09日
    瀏覽(92)
  • 算法套路十四——動態(tài)規(guī)劃之背包問題:01背包、完全背包及各種變形

    算法套路十四——動態(tài)規(guī)劃之背包問題:01背包、完全背包及各種變形

    如果對遞歸、記憶化搜索及動態(tài)規(guī)劃的概念與關(guān)系不太理解,可以前往閱讀算法套路十三——動態(tài)規(guī)劃DP入門 背包DP介紹:https://oi-wiki.org/dp/knapsack/ 0-1背包:有n個物品,第i個物品的體積為w[i],價值為v[i],每個物品至多選一個, 求體積和不超過capacity時的最大價值和,其中i從

    2024年02月10日
    瀏覽(89)
  • C++算法初級11——01背包問題(動態(tài)規(guī)劃2)

    C++算法初級11——01背包問題(動態(tài)規(guī)劃2)

    辰辰采藥 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫(yī)師。為此,他想拜附近最有威望的醫(yī)師為師。醫(yī)師為了判斷他的資質(zhì),給他出了一個難題。醫(yī)師把他帶到一個到處都是草藥的山洞里對他說:“孩子,這個山洞里有一些不同的草藥,采每一株都需要一些時

    2024年02月02日
    瀏覽(92)
  • 【算法日志】動態(tài)規(guī)劃刷題:01背包問題,多重背包問題(day37,day38)

    【算法日志】動態(tài)規(guī)劃刷題:01背包問題,多重背包問題(day37,day38)

    目錄 前言 目標(biāo)和(01背包) 一和零(01背包) 零錢兌換(多重背包) 排列總和(多重背包) 這兩天都是背包問題,其中的01背包的一些應(yīng)用問題需要一定的數(shù)學(xué)建模能力,需要i將實際問題簡化成我們熟悉的背包問題;而這兩天的多重背包問題還算比較基礎(chǔ),但也要我明白了

    2024年02月11日
    瀏覽(95)
  • 【算法|動態(tài)規(guī)劃 | 01背包問題No.2】AcWing 423. 采藥

    【算法|動態(tài)規(guī)劃 | 01背包問題No.2】AcWing 423. 采藥

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【AcWing算法提高學(xué)習(xí)專欄】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成

    2024年02月06日
    瀏覽(93)
  • 算法設(shè)計與分析實驗二:動態(tài)規(guī)劃法求解TSP問題和01背包問題

    算法設(shè)計與分析實驗二:動態(tài)規(guī)劃法求解TSP問題和01背包問題

    【實驗內(nèi)容】 (1)tsp問題:利用動態(tài)規(guī)劃算法編程求解TSP問題,并進行時間復(fù)雜性分析。 輸入:n個城市,權(quán)值,任選一個城市出發(fā); 輸出:以表格形式輸出結(jié)果,并給出向量解和最短路徑長度。 (2)01背包問題:利用動態(tài)規(guī)劃算法編程求解0-1背包問題,并進行時間復(fù)雜性分

    2024年02月03日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包