重複口胡的動態規劃

2021-08-24 23:10:34 字數 2621 閱讀 3424

今天老師口胡了一波動歸,如果有其他人發了一篇差不多的,一定是我同學!

範圍:適於解決多階段、多決策、最優解(求方法數)問題

當前階段 ,選最優(每次選取能取到的最優值,從而得到乙個區域性最優值) 。例題:潛水

分而治之  ,也就是分->治

例題(或用法):快排 ,歸併排序

當前階段, 記錄 所有的最優  (也就是常說的空間換時間)

由於分部分的時候,重合部分經常出現,就會出現大量重複的遞迴呼叫,然而用了記憶化搜尋來解決,可使動歸 進一步 轉換為遞推。

動態規劃的兩個必要條件:

1)無後效性:當前的最優解與後面無關;

2)最優子結構:每次都要保證最有值;

看到這兩個條件滿足就基本確定是動態規劃了;

動歸解題步驟:

1)確定能用動態規劃解決;

2)劃分階段:時間,空間,順序;(不同階段效率不同,具體題目具體分析)

拓撲排序*也是階段劃分

floyd 的k迴圈

3)設定狀態:前i階段的******的最優值是什麼

設定f[i]([j]),表示某個狀態的最優值

洛谷 2519,為海亮題庫(hloj)407加強版;

狀態是幾維,迴圈也就是幾重迴圈

區間類:從第i個到第j個的最優值;

4)建立狀態轉移方程

當前的狀態(最優值、方案數)有前面那些狀態推導出;

繼續加迴圈;

例:零一揹包:

f[i][j]狀態表示 前i個物品佔據容量為j的揹包的最優值

故轉移方程為

f[i][j]=max(f[i-1][j](0,即不取),f[i-1][j-w[i]]+v[i](1,表示取));

*拓撲排序定義:拓撲排序順序就是在圖上做動態規劃的階段劃分;(滿足條件時)

動態規劃分類的最終目的,是不分類。

1)  資源分配

hloj411機械分配: f[i][j]   狀態表示前i個公司 分配 j 臺機器

412馬棚:狀態:前i匹馬分j個馬棚

使用三重迴圈實現;

延伸:輸出方案,是noip裡也會考察的

2)  揹包

a ) 0/1  揹包:

f[i][j]=  max(f[i-1][j],f[i-1][j-c[i]]+w[i])

不要要第i個物品

用一維實現狀態 :  f[j]   i迴圈(v...c[i]) 倒著迴圈;

ps:零一揹包是其他所有揹包類問題及變形的基礎,所以一定要掌握,詳見揹包九講(

b)完全揹包

f[i][j]=  max(f[i-1][j],f[i][j-c[i]]+w[i])

不要要第i個物品

一維狀態 :  f[j]   i迴圈(c[i]...v) 正著迴圈;  

ps:觀察零一揹包與完全揹包二維狀態、一維狀態的分別不同之處並思考原因。

c)多重揹包

每個物品有多個,第i個物品有k個,  1倍,2倍,3倍……k倍

二進位制優化  log2(k)

13= 1   12

2   10

4   6

6d)二維體積揹包

f[i][j][k]設定三維的狀態,其實與零一沒什麼區別,只要再加上一層迴圈而已,轉移方程也類似

同時也可以壓縮為二維的:

f[j][k]=max(f[j][k],f[j-w1[i]][k-w2[i]]+v[i]);

e)分組:

可以將每組都合併成乙個物品,再按照零一來做;

f)有依賴 (樹形動態規劃):

這個。。。已經不在今天的範圍之內了。。。

若是想學習還是另請高明吧。

ps:揹包類問題是動態規劃的重點考點,熟悉掌握才能應對考場上的各種變形、結合的揹包問題。

3)  雙程序:

兩個程序,用i、j分別指示;通過兩個程序之間的關係來求解;

例題:最長公共子串行、構建雙塔等;

4)  區間類

區間問題的狀態設定、轉移方程都不同於其他的dp,

f[i][j]表示從第i個 到 第 j個 的最優值 

f[i][j];

階段 : 區間長度

for (int p=0;p<=n;p++) //區間長度

for (int i=1;i<=n;i++)//起點位置

環狀的區間類: 長度變兩倍,依次去做

5) 二維  由線性變成了平面

呵呵,我還沒學呢;

例題:農田個數、創意吃魚;

聽說都是有意思的題;

呼,就是這樣,劉老師口胡一波的東西我加了一些改動就放上來了。。。。

YTU3141 動態規劃高階題目之神奇的口袋

時間限制 1 sec 記憶體限制 64 mb 提交 80 解決 49 提交 狀態 討論版 命題人 lyh 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些...

動態規劃 保留重複元素的LCS 1045

這題也可以用lis求解。lis解題報告 動態規劃 對輸入進行hash處理的lis 1045 普通lcs是必須完全匹配的,所以狀態轉移方程式 末端匹配到時 但是本題連續的序列是可以累加的。所以狀態狀態轉移方程式 末端匹配到時 兩個狀態的最大值 1就是dp i j 的值 ac include inclu...

最長不重複子序列(DP hash 動態規劃)

leetcode longest substring without repeating characters class solution public int lengthoflongestsubstring string s int b 0,rele 0,i 0 b back mark,i f...