四邊形不等式(dp優化)應用及證明(石子合併n^2)
阿新 • • 發佈:2019-01-13
石子合併是一道很經典的區間動規。
在n^3的暴力裡面,我們的狀態轉移方程是:
現在我們有一種很牛逼的優化,可以把石子合併優化到接近O(n^2)
四邊形不等式
我們先來看滿足四邊形不等式的條件:若
如果有(交叉小於包含)(凸四邊形不等式)
那麼滿足四邊形不等式優化。
定理1:如果w滿足凸四邊形不等式,那麼f也滿足凸四邊形不等式
定理2:如果f滿足凸四邊形不等式,我們定義為在狀態轉移時取得k為最優,那麼,此時是滿足決策單調性,也就是
首先我們先跳過定理的證明(假裝我們明白了這些定理的證明咳咳咳),來看看如何通過定理來優化。
既然知道了這個定理,那我們就可以優化掉原本k的那一層迴圈,轉化為優美的O(n^2)啦
程式碼:
for(int l=3;l<=n;++l)
for(int i=1;i<=n-l+1;++i)
{
int j=i+l-1;
dp[i][j]=INF;
for(int k=s[i][j-1];k<=s[i+1][j];++k)
if((dp[i][k]+dp[k+1][j]+a[j]-a[i-1])<dp[i][j])
s[i][j]=k,dp[i][j]=dp[i][k]+dp[k+1 ][j]+a[j]-a[i-1];
}
ps:O(n)預處理出s[i][i+1]與dp[i][i+1]
簡單證明
下面我們來證明幾個定理。
假設我們已經證明出了
現在我們來推導f函式也滿足四邊形不等式。
假設
由於對稱性,我們可以假設(也就是說反過來也可以)
那麼我們可以得到
那麼