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

【算法宇宙——在故事中學算法】背包dp之完全背包問題

這篇具有很好參考價值的文章主要介紹了【算法宇宙——在故事中學算法】背包dp之完全背包問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學習者不靈絲相傳,而自杖明月相反,子來此事卻無得失。

前言

盡管計算機是門嚴謹?shù)膶W科,但正因為嚴謹,所以要有趣味才能看得下去。在筆者的前幾篇算法類文章中,都采用了以小故事作為引入的方式來介紹算法,但在回看的時候發(fā)現(xiàn)學術味還是太濃了,完全沒有想看下去的欲望orz~因此筆者決定改組文章結構,將整個算法都以故事的形式呈現(xiàn),至少讓讀者能看下去,希望能幫助到大家!

正文

小明的探險之旅(2)

上文說到小明從家中收拾好裝備后,就踏上了茫茫星海的探險征程。在航行了數(shù)天后,他到達了第一個星球——食戟之星。這顆星球以昂貴而美味的食物而著稱,由于小明實在太餓,他直接鉆進了一家自助餐店,想好好的回回血。

小明看著這些食物不禁直流口水:這么多好吃的,都好想吃!可是怎么吃才能吃的最好呢。。(注:小明吃好的標準是吃到的所有食物價格總和最高,也就是最能回本)

(小明思考了一會)

小明:感覺這個問題和我搬裝備時候的問題很像,但是這次所有食物都是無限供應的。。先想一想之前用到的轉移方程吧!
【算法宇宙——在故事中學算法】背包dp之完全背包問題

那么,之前的裝備一種只有一件,而這次的食物有無數(shù)件,也就是說,不一定是j-w[i],也可以是j-2w[i],j-3w[i]……所以就是
【算法宇宙——在故事中學算法】背包dp之完全背包問題
可是這樣的話,時間復雜度就太大了……就算用了滾動數(shù)組優(yōu)化,也會到達平方級的時間復雜度,還要進行復雜的邊界判斷……

(小明陷入了苦想,直覺告訴他,這種算法還可以進行優(yōu)化,但以他的學識,想破腦袋也想不出來。最后,小明只能按照這種算法不停推算,等到推算完,他撐著饑腸轆轆的身體去取餐的時候,卻發(fā)現(xiàn)已經(jīng)到了打烊的時間了!小明沒辦法,只能到街上買了一個手抓餅,一邊淚流滿面的吃著,一邊發(fā)誓自己一定要學好算法……)

最后的優(yōu)化

實際上,小明的直覺很準確,可惜他的智商沒有直覺那么強大~那么接下來,我們接手他的思路,看看接下來還有什么能優(yōu)化的地方。
很顯然,這次依然可以用滾動數(shù)組優(yōu)化,但為了展示方便,我們先壓縮到i和i-1兩行:

黃色塊是我們當前要確定的值,即fi,j紅色塊是根據(jù)上面的公式,我們枚舉的值,設w[i]=2,則:
【算法宇宙——在故事中學算法】背包dp之完全背包問題
接下來是重點,我們看確定fi,j-2時的表格,黃色塊是要確定的值,紅色塊是枚舉的值:
【算法宇宙——在故事中學算法】背包dp之完全背包問題

發(fā)現(xiàn)了什么?fi,j-2的值其實就是除了fi-1,j之外的所有紅色塊的最大值,那么我們可以通過只比較fi,j-2和fi-1,j這兩個塊的值就可以得出fi,j的值了,即:
【算法宇宙——在故事中學算法】背包dp之完全背包問題
這就是完全背包問題的轉移方程。接下來上代碼:

代碼

#include <iostream>
using namespace std;
const int maxn = 13010;
int n, W, w[maxn], v[maxn], f[maxn];

int main() {
  cin >> n >> W;
  for (int i = 1; i <= n; i++) cin >> w[i] >> v[i]; 
  for (int i = 1; i <= n; i++)//循環(huán)n次,因為要對n件物品進行選擇
    for (int l = w[i]; l <= W; l++)//從前向后更新
      f[l] = max(f[l], f[l - w[i]] + v[i]);//轉移方程
  cout << f[W];
  return 0;

最后小記以下筆者在寫這篇博客時想到的一個關于邊界處理的問題:當l<w[i]時,不可能再取第i件物品,所以不會改變數(shù)組中的數(shù)據(jù);而一開始由于定義的是全局變量,所以數(shù)據(jù)都初始化為0,也與如果一直不取物品的話,價值為0的事實相符合,所以不特意處理邊界是沒問題的。
【算法宇宙——在故事中學算法】背包dp之完全背包問題
我是霜_哀,在算法之路上努力前行的一位萌新,感謝你的閱讀!碼文不易,如果覺得好的話,可以關注一下,我會在將來帶來更多更全面的算法講解!文章來源地址http://www.zghlxwxcb.cn/news/detail-419004.html

到了這里,關于【算法宇宙——在故事中學算法】背包dp之完全背包問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 算法第十五期——動態(tài)規(guī)劃(DP)之各種背包問題

    目錄 0、背包問題分類 1、?0/1背包簡化版 【代碼】 2、0/ 1背包的方案數(shù) 【思路】

    2023年04月09日
    瀏覽(26)
  • 動態(tài)規(guī)劃:完全背包問題----中專生刷算法

    動態(tài)規(guī)劃:完全背包問題----中專生刷算法

    需要基礎:閆氏dp分析法,01背包問題 先去看一下01背包問題,再看完全背包 動態(tài)規(guī)劃:選擇dp及優(yōu)化01背包問題-CSDN博客 做過01背包問題的同學會發(fā)現(xiàn),完全背包問題的代碼 在01背包基礎上改動很小,但是里面的思想,有很大差距 題目 有 N 種物品和一個容量是 V的背包,每種物品

    2024年04月16日
    瀏覽(36)
  • 力扣刷題-動態(tài)規(guī)劃算法3:完全背包問題

    力扣刷題-動態(tài)規(guī)劃算法3:完全背包問題

    問題描述: 1)有N件物品和一個最多能背重量為W的背包。第i件物品的重量是weight[i],得到的價值是value[i] 。 2) 每件物品都有無限個(也就是可以放入背包多次) (比0-1背包多出的條件) 3) 求解將哪些物品裝入背包里物品價值總和最大。 求解步驟: 1)首先遍歷物品,然

    2023年04月13日
    瀏覽(137)
  • 算法篇——動態(tài)規(guī)劃 完全和多重背包問題 (js版)

    算法篇——動態(tài)規(guī)劃 完全和多重背包問題 (js版)

    01 背包 問題和 完全背包 問題的不同點在于,所有的物品只能 使用一次 ,判斷? 哪些物品? 裝進背包里 物品價值和 最大;而 完全背包 問題中,所有物品都能 使用n次 ,判斷 哪個物品 裝 n 個進去 物品價值和 最大。 01 背包的遞推公式是: 【當然先遍歷物品還是背包的容量

    2024年02月08日
    瀏覽(30)
  • 算法題打卡day45-背包問題 | 70. 爬樓梯 (進階)、322. 零錢兌換、279.完全平方數(shù)

    70. 爬樓梯 - 力扣(LeetCode) 狀態(tài):查看思路后AC。 除了常規(guī)的可以爬一或二級臺階,當題目稍微修改一下,變成可以爬m(xù)級臺階,之前的DP思路就有局限(dp[i] = dp[i-1] + dp[i-2),為了通殺這類問題,可以將題目轉換為完全背包問題,可以爬的樓梯級數(shù)就是背包中的物品,樓梯總

    2024年02月11日
    瀏覽(30)
  • 力扣算法刷題Day44|動態(tài)規(guī)劃:完全背包問題 零錢兌換II 組合總和Ⅳ

    力扣題目:#518.零錢兌換II(完全背包組合問題) 刷題時長:7min 解題方法:動態(tài)規(guī)劃(完全背包) 復雜度分析 時間復雜度: O(mn),其中 m 是amount,n 是 coins 的長度 空間復雜度: O(m) 問題總結 對遞推公式的理解 本題收獲 題意轉換:純完全背包是湊成背包最大價值是多少,而本

    2024年02月13日
    瀏覽(28)
  • 動態(tài)規(guī)劃DP之背包問題3---多重背包問題

    動態(tài)規(guī)劃DP之背包問題3---多重背包問題

    目錄 DP分析: 優(yōu)化: ?二進制優(yōu)化 例題: ? ? ? ? 01背包是每個物品只有一個,完全背包問題是每個物品有無限個。 ? ? ? ? 那么多重背包問題就是 每個物品有有限個 。 有?N?種物品和一個容量是?V?的背包。 第?i?種物品最多有?si?件,每件體積是?vi,價值是?wi。 求解

    2024年03月20日
    瀏覽(43)
  • 【動態(tài)規(guī)劃之完全背包問題】完全背包問題的通用解法與優(yōu)化

    【動態(tài)規(guī)劃之完全背包問題】完全背包問題的通用解法與優(yōu)化

    ?? 前面的話 ?? 本篇文章將介紹動態(tài)規(guī)劃中的背包問題——完全背包問題,前面我們已經(jīng)介紹了0-1背包問題,其實完全背包問題就只改了0-1背包問題的一個條件,即物品可選擇次數(shù)由一次改為無數(shù)次,僅此而已,下面我們就來開始介紹完全背包問題。 ??博客主頁:未見

    2023年04月22日
    瀏覽(115)
  • 背包問題——01背包|完全背包

    背包問題——01背包|完全背包

    目錄 前言背包問題的歷史 ?01背包 ?1、題目 2、暴力解01背包 ?Ⅰ、代碼 3、動態(tài)規(guī)劃解01背包 Ⅰ、二維dp數(shù)組解01背包 1)dp數(shù)組的含義 ?2)遞推公式 ?3)dp數(shù)組的初始化 ?4)遍歷順序的討論 ?5、代碼 ?Ⅱ、一維數(shù)組解01背包 ?1)一維數(shù)組|滾動數(shù)組 ?2)一維數(shù)組的含義及遞

    2024年02月02日
    瀏覽(23)
  • 算法競賽必考算法——動態(tài)規(guī)劃(01背包和完全背包)

    算法競賽必考算法——動態(tài)規(guī)劃(01背包和完全背包)

    1.1題目介紹 1.2思路一介紹(二維數(shù)組) 代碼如下: 1.3思路二介紹(一維數(shù)組) 空間優(yōu)化 ??為什么可以使用一維數(shù)組? ??我們先來看一看01背包問題的狀態(tài)轉移方程,我們可以發(fā)現(xiàn) f[i]只用到了f[i-1],其他的是沒有用到的,我們可以用滾動數(shù)組來做。 ??還有一個原因就是我

    2024年02月02日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包