區間dp 與 四邊形不等式優化 學習筆記
很久之前在網上看了傳說中的四邊形不等式,然後現在發現忘光了。趁比賽前夕趕快拿來熟悉一下。
一、引入
形如:
dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]}
的狀態轉移方程,如果不加優化的話ijk三層迴圈O(n^3)的複雜度是難以接受的。考慮四邊形不等式優化。其中k相當於決策,下面用sp[i][j]來表示k最優的決策。
1.四邊形不等式
對於( a < b <= c< d )若有
f[a][c]+f[b][d]<=f[b][c]+f[a][d]
則說這個東西滿足四邊形不等式,當然這個東西可能是dp陣列,也可以是其他陣列,比如引入裡提到的cost陣列,表示的是i到j的花費(比如合併石子問題)
2.重要定理(判斷此方程是否可以四邊形優化)
設s[i][j]是dp[i][j]取到最優解的k值,即s[i][j]是最優決策。
若上述花費陣列cost滿足四邊形不等式,則dp方程也滿足四邊形不等式。
若dp方程滿足四邊形不等式,則決策s單調,即s[i][j-1]<=s[i][j]<=s[i+1][j]
進而有:(對於上述dp方程來講,下同)
若cost滿足四邊形不等式,則決策s也滿足四邊形不等式,即
設(i < i+1 <= j<j+1),有:
s[i][j-1]<=s[i][j]<=s[i+1][j]
3.已有結論,如何優化?
對於dp方程:
dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]}
若已知s[i][j-1]<=s[i][j]<=s[i+1][j](要記住s陣列是k的最優決策),則:
- 對於j來說,s[i][j]無後效性
- 對於i來說,s[i][j]無前效性
故倒序迴圈i,正序迴圈j(當然對於特定的問題i和j也有範圍限制來減小時間常數)
然後根據每一個i,j,都已知dp[i][j-1]的最優決策k=s[i][j-1]、和dp[i+1][j]的最優決策k=s[i][j+1],又因為當前狀態dp[i][j]的最優決策k=s[i][j]滿足s[i][j-1]<=s[i][j]<=s[i+1][j],所以k只需要在s[i][j-1]到s[i+1][j]之間列舉即可。而這個區間在整個三重迴圈內是一直向內縮小的,所以整個三層迴圈的k相當於只遍歷了一遍區間,故三層迴圈退化成二層迴圈的複雜度。
二、證明
佔坑,等南京比完賽再補