DP模式
DP也練了一部分,找感覺。
說一下VIJOS上的。
◆線性連接性的問題(包括分配問題,轉(zhuǎn)換問題,連接問題,及宏觀擴(kuò)展),這樣的例子比較多,方程就是由一維來記錄處理到的線性位置作為階段,然后用額外的未來記錄分配的情況,之前臨近的連接情況等,這樣一個(gè)一個(gè)把狀態(tài)連接起來得最優(yōu)
例子:
P1323化工廠裝箱員 P1386礦工配餐 P1417魔法塔防 P1421更換輪胎 P1456最小總代價(jià) P1470教主的后花園 P1002過河
◆線性的選擇問題
這種就是類似最長不上升子序列之類的那種,當(dāng)處理到i時(shí),在前面選擇一個(gè)可能的情況跟他連起來,例子比如說:
P1098合唱隊(duì)形 P1331看球的巴士
◆開放的劃分推進(jìn)
這種一般就是一個(gè)二維的方程,表示把這一段分在一起,可以開額外的維來表示一些特殊的情況,這樣可以已分段為階段向后推進(jìn),這種一般可以用于一種按照某種規(guī)則劃分,使劃分的段數(shù)最優(yōu)的問題,也就是劃分的段數(shù)未知時(shí),并且這個(gè)不適于環(huán)形的,記憶化的話會(huì)出問題。。。
例子:
P1306 遞增序列 P1322解題
◆封閉的劃分或者選擇
一般就是二維的方程表示把這一段已經(jīng)劃分完畢后的情況,以劃分的的長度為階段,比較適合于給定劃分段數(shù)的劃分問題,可以處理環(huán),用記憶化會(huì)比較好些。。。轉(zhuǎn)移時(shí)可以枚舉劃分的中心或者這一部分中劃分為獨(dú)立的一段的位置
例子:
P1100加分二叉樹 P1118統(tǒng)計(jì)單詞個(gè)數(shù) P1218數(shù)字游戲 P1312能量項(xiàng)鏈
◆樹形DP
很好很強(qiáng)大的Dp,一般依托樹上的關(guān)系進(jìn)行轉(zhuǎn)移,并且因?yàn)橐劳嘘P(guān)系比較嚴(yán)重,所以會(huì)開幾維來記錄情況,將每種情況分開處理。一般,如果不愿意多叉轉(zhuǎn)二叉,可以用哪種求和以后進(jìn)行枚舉兒子進(jìn)行替換
例子
P1144小胖守皇宮 P1395HYH的邏輯電路
◆背包問題
背包是個(gè)很好很強(qiáng)大的東西,各種例子,應(yīng)用太多了。。。包括分組背包,判定性背包,將詭異的東西作為物品什么的。。。例子:
P1025小飛俠游園方案 P1104采藥 P1117數(shù)的劃分 P1133裝箱問題 P1198最佳課題選擇 P1313今明的預(yù)算方案 P1317開心的今明 P1334NASA的食物計(jì)劃 P1407古韻之刺繡
?
◆圖上的DP
圖上的DP一般都會(huì)有某種限制來形成階段和無后效性,比如階段圖,方向限制,權(quán)值(編號(hào))限制,時(shí)間線限制,找到這個(gè)階段就好搞了,最好進(jìn)行記憶化搜索
例子:P1011清帝疑惑之順治 P1364吃吃吃 P1370采果子 P1474雷曼兔
?
◆多進(jìn)程DP 多方向Dp
這些都是比較奇怪的類型,比如旅行商簡化版,HILL,三取方格數(shù)。。。不具體說了
?
◆雙位選擇問題:
類似最長公共子序列那種的,有兩種兩種位置共同構(gòu)成狀態(tài),然后根據(jù)限制條件,選擇兩邊,或者放棄某一邊
一些例子:
P1327回文詞 P1378矩陣取數(shù)游戲
?
◆包含性的可行性DP
V囧上比較少,但是如果想不到最優(yōu)性的DP,可以想這種可行性的。。。
?
◆◆注意的問題
多個(gè)小Dp組成,比如矩陣取數(shù)游戲,統(tǒng)計(jì)單詞個(gè)數(shù),合唱隊(duì)形之類的,就是不同次的DP沒有關(guān)系,但是總起來就解決問題了。
空間問題:考慮可不可以使用滾動(dòng)數(shù)組,但那時(shí)滾動(dòng)數(shù)組如果正推要考慮每次都進(jìn)行初始化
數(shù)據(jù)范圍:看清楚是否需要高精,另外如果用int64那么中間的變量也需要用int64
賦初始值:有時(shí)注意賦值為maxlongint時(shí),注意是不是會(huì)不夠大,中間過程會(huì)不會(huì)兩個(gè)相加爆掉。。。
環(huán)形DP--處理環(huán):處理環(huán)有好幾種情況,比如依賴于劃分的,主要問題就是劃分點(diǎn)可能正好位于環(huán)的兩端相連的的地方,所以一般的做法是拷貝環(huán),然后枚舉每個(gè)起始點(diǎn),記憶化搜索,比如數(shù)字游戲,能量項(xiàng)鏈。另一種就是可能就是相鄰的決策有限制條件,這樣可以單獨(dú)處理一下邊界位置就行了,比如說1470后花園。
輸出方案:狀態(tài)轉(zhuǎn)移的時(shí)候順便記錄,至于字典序的問題,不一定在每次DP的時(shí)候選擇一個(gè)字典序比較靠前的,要想清楚,最好都記下來然后深搜或者用字符串排
總結(jié)
- 上一篇: 2012年CS毕业生
- 下一篇: Skpi List跳表