機試指南第七章 動態規劃 筆記及揹包問題

2022-09-05 04:48:11 字數 1242 閱讀 8700

第七章動態規劃

一、遞迴求解:

遞迴問題的關鍵是解決初始值和遞推公式,從而將複雜問題分解為簡單問題直至初始值對應的極簡問題,從而得到答案。

套路:初始值+遞迴公式。

trick:將求出的值儲存在陣列中以便復用。

二、問題1:最長遞增子串行(lis:longest increasing subsequence):

遞增子串行定義:從已知序列中取出若干數為原序列的子串行,當下標ix>iy時,aix>aiy,則該序列是原序列的乙個遞增子串行。

第乙個元素的lis即為1,之後從序列中讀入第j位新元素,之前的各位對應的lis已知,所以如果之前第i位元素小於新元素時,則可以與j-1位元素的lis長度lmax比較,進行更新。

遞推公式:

dp[1] = 1;

dp[j] = max? 為什麼比較的右項是dp[i-1][j]而不是dp[i-1][j-w]?

因為你在這裡要更新的是dp[i][j] ,並不能僅僅只考慮dp[i-1][j-w], 如果是這樣的話dp[i-1][j-w]+v肯定比dp[i-1][j-w]大,還要比什麼。這樣寫的目的是將加入第i個物品後的總價值與不加入該物品但是達到同樣達到相同體積的揹包總價值相比較,如果價值更大則加入第i件物品。

比如之前已經迴圈過體積10,30的物品,達到40時的價值為4,現在考慮體積40,價值為3的物品,相同體積加入它的價值就不如前者高,所以不放入揹包。

問題二:為什麼0-1揹包中j要逆序迴圈?

因為每個物品只能使用一次。比如我們有五個物品,體積為10, 30, 20, 40,價值為1,2,3, 4。考慮正序迴圈代入優化後的0-1揹包方程,放入第乙個物品時有dp[10]=1, 由於我只有乙個物品,因此在計算dp[20]的時候我希望dp[10]還是初始狀態,但是在這種情況下dp[20]就會受到dp[10]的影響變為2。

逆序迴圈就不會存在這個問題,因為j-w問題三:完全揹包如何解決每種物品數都無限的問題?

正好利用了問題二,我現在每件物品都不限制數量,那麼正序迴圈正好可以考慮到物品疊加利用的效果。

問題四:多重揹包怎麼拆分的?

比如一種物品數量為10,拆分成1,2,4,8,3,這五個數確實可以組合成1-10的任意整數。

《王道論壇計算機考研機試指南》第七章 動態規劃

n階樓梯上樓問題 include using namespace std int f 91 int main 不容易系列之一 攔截飛彈 include include using namespace std intlist 26 按襲擊事件順序儲存各飛彈高度 int dp 26 dp i 儲存以第i...

css權威指南學習筆記 第七章

由於之前一直沒有系統的看過css相關的書籍,導致自己css方面一直都是處於零散狀態。知其然,不知其所以然。所以買了 css權威指南 雖然比較老了,但是應該也會收穫很大。1 水平方向上 margin left border left padding left width padding right b...

統計學習方法學習筆記(第七章 支援向量機)

支援向量機是一種二類分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機 支援向量機還包括核技巧,這使它稱為實質上的非線性分類器。支援向量機的學習策略就是間隔最大化。可以形式化為乙個求解凸二次優化的問題,也等價於正則化的合頁損失函式的最小化問題。支援向量機的學習演...