學習總結(揹包)

2021-10-05 05:34:10 字數 1287 閱讀 5496

一、知識總結

1、01揹包

01揹包特點就是每一種物品都只有一件,每件物品可以選擇放還是不放。

01揹包的狀態轉移方程是f[i][j]=max,這裡f[i][j]表示前i件物品恰好放入乙個容量為j的揹包中,w[i]是第i件物品的容量,怎麼理解這個狀態轉移方程呢,就是你在第i個物品的時候,你可以選擇放還是不放,如果不放的話,總價值就跟i-1個物品的時候一樣,如果你放的話,那麼你就要把空間j留處一部分放第i件物品,所以是v-w[i]。

這裡還可以優化空間複雜度,把二維化成一維,即f[v]=max

2、完全揹包

與01揹包很相像,不同的是可以取無限件。

狀態轉移方程為dp[i][j]=max看上去跟01揹包的一摸一樣,一維也是f[v]=max,但01揹包記憶體迴圈是從w-0遍歷,而完全揹包是從0-w,原因就在於取多少件上。

3、多重揹包

多重揹包相對於完全揹包01揹包又多了變化,因為他每件物品都是有一定數目的,然後這一點就需要結合01和完全揹包的思路來處理這個問題。

狀態轉移方程是f[i][j]=max,這裡就需要用到三重迴圈了,畢竟還要查詢選取的件數。

多重揹包問題還可以轉換為01揹包,可以將同種物品都分開看成單獨的物品,然後用01揹包解,但是這樣子複雜度仍然很高,要進一步再優化,考慮一下二進位制(不得不說二進位制啥都快…),將係數分成1,2,4,8,……,2k−

12^

2k−1

,n[i]-2k2^

2k+1,且k是滿足n[i]-2k2^

2k+1>0,然後再用01揹包解就可以了。

二、做題和感想

最近做的題不多,寫完了一本通上圖的題,也就做了沒幾道動態規劃題,計畫著這一周盡量補一下。最近動態規劃做的幾道題大體都是按照套路來的,線性dp,因為上課也講過,所以做起來不是很難,大題是讀題,找狀態轉移方程,最近這幾道題都是i-1推i的,所以容易寫一些,看的課件上的揹包問題,大多也是套一下狀態轉移方程來解,所以說還好吧。近期打了一場div3的比賽,有點難受,a題用的時間不長,過了b題直接看的c題,改了十幾遍,結果很不理想,乙個很簡單的規律題,解了這麼長時間沒有解出來,等第二天翻題解的時候發現只差一點點。現在cf掉到灰了,慢慢來,慢慢往上打吧,現在解出一道題來也是扣分,要想加分應該要做出三四道題吧。現在跟進度稍微有點吃力,也不知道是不是在家久了惰性太大了,很煩躁,沒有耐心,甚至有時候對做題有了牴觸心態。都說人往高處走,總要承受什麼的,這八周過去了,繼續挺吧,希望自己能夠在acm學習和訓練的途中,能夠找到自己的方法,找到快樂。今天聽了邵學長講的一些東西,也漸漸看明白了一些東西,不囿於眼前,不困於混沌,既然加都加了,為什麼不繼續走下去呢?日常給自己加雞湯,希望不被落下,跟進步伐,加油吧。

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...

01揹包,多重揹包,完全揹包 總結

可以先看下這篇部落格理解下動態規劃的思想 初識動態規劃 寫在前面的 這篇部落格主要寫的是,乙個容量為v的揹包去裝n個物品能獲得的最優解的問題 問題簡述 現在有乙個揹包,它能容納的最大重量為v,問揹包所能帶走的最大價值是多少?01揹包 有n個物品,每個物品的重量為w i 每個物品的價值為h i 對於每...