算法之DP
阿新 • • 發佈:2018-10-29
三角形 例題 最大 triangle 圖片 ref targe opened -c
線段樹
一般DP
都是有模板的,先初始化,然後找到不同狀態下數值的關系,使得某個狀態可用另一個狀態由一個固定的方式轉移而來,列出狀態轉移方程,這就是DP;
例題
P1216 [USACO1.5]數字三角形 Number Triangles
1 f[i][j]+=max(f[i-1][j-1],f[i-1][j]);方程
P1044 棧
1 f[i]+=f[j]*f[i-j-1];方程
P2800 又上鎖妖塔
1 f[i]=min(f[i-1]+t[i],min(f[i-2]+t[i-1],f[i-3]+t[i-2]));方程
P1057 傳球遊戲
可以看出,裸的DP是幾乎沒有難度的,當然某些題除外如P1004,P1280等題,值得思考。
背包問題
背包屬於基礎DP,但拓展性是最高的。
具體可以看dd大牛的《背包九講》
1 f[v]=max{f[v],f[v-c[i]]+w[i]};
上面的是01背包的轉移方程,但v是從V...c[i]的。
為什麽呢?這個方程代表第v個體積的物體的最大值=max(他自己本身,v-第i個物體的體積時的最大值+第i個物體的值)
例題
01背包基本是套這個模板,但也不缺乏很有思考性的,如P2370,P2979,P1156,P4544(這個要單調隊列優化,但純背包有60-70分,題解在這裏);
線段樹 單調隊列優化
優先隊列優化
狀壓DP(就是變相暴力)
樹形DP(我最不擅長)
二分優化
還有一些提高組的就不列了(如斜率優化,數位,插頭DP)
算法之DP