DP優化 四邊形不等式

2022-05-05 16:18:09 字數 1945 閱讀 7084

使用範圍:區間序列\(dp\)求最小值(一定是最小值)

對於動態規劃轉移方程

dp[i][j]=min(dp[i][k],dp[k+1][j])+w(i,j);
其中\(w(i,j)\)只受\(i,j\)取值影響

如果滿足下面兩個條件

\(1.\)區間單調性:如果對於\(\forall i \leq i'< j' \leq j,w(i',j') \leq w(i,j)\)(即小區間取值\(\leq\)大區間取值)

\(2.\)四邊形不等式:\(\forall i \leq i'< j' \leq j,w(i,j)+w(i',j')\leq w(i',j)+w(i,j')\)

即中的紅線總長\(\geq\) 藍線總長

如果\(w(i,j)\)同時滿足區間單調性和四邊形不等式

那麼\(f(i,j)\)滿足四邊形不等式

令\(s(i,j)\)為\(f(i,j)\)在取到最優解時的決策點\(k\)

那麼決策本身具有單調性,即滿足\(s(i,j)\leq s(i,j+1)\leq s(i+1,j+1)\)

用\(j\)代替\(j+1\)得到

\(s(i,j-1)\leq s(i,j)\leq s(i,j+1)\)

轉移方程變為

\(f(i,j)=min(f(i,k)+f(k+1,j))+w(i,j);\ (s(i,j-1)\leq k\leq s(i+1,j))\)

可以證明,他將時間複雜度降到了\(o(n^2)\)

什麼時候使用四邊形不等式?

只需要牢記公式

\(s(i,j-1)\leq s(i,j)\leq s(i,j+1)\)

考試時可以打一張決策表看是否滿足上面式子,滿足可以使用四邊形不等式

\(1.\)序列\(dp\)有時可以使用四邊形不等式優化,但僅僅是常數優化

\(2.\)需要注意四邊形不等式僅針對求最小值的情況

\(3.\)注意\(s\)陣列(下標取值範圍)需要初始化,\(s[i][i]=i\)

p1880石子合併

這道題的四邊形不等式非常裸,但要注意求最大值不能用四邊形不等式,注意到最大值可以使用決策單調性優化

求最大值時\(f[i][j]\)一定是從\(f[i][j-1]\)或\(f[i+1][j]\)轉移過來的,所以可以將第三維優化掉

#include#include#define maxn 2005

#define inf 0x3f3f3f3f

#define re register

using namespace std;

int a[maxn],sum[maxn];

int f1[maxn][maxn],f2[maxn][maxn];

int s[maxn][maxn];

int n,tmp,pos,tmp2;

int ans1=0x3f3f3f3f,ans2;

int main()

for(re int i=1;i<=2*n;++i)

for(re int i=2*n-1;i>=1;--i)

for(re int j=i+1;j<=2*n;++j)

}for(re int i=1;i<=n;++i)

printf("%d\n%d",ans1,ans2);

return 0;

}

四邊形不等式優化DP

記錄一下,以免忘了 對於乙個形如 dp i j min dp i k dp k j w i j 的轉移方程 注意取最大值時不一定滿足四邊形不等式 若對於 a leq b leq c leq d 且 w leq w 那麼我們稱 w 關於區間包含關係單調 若對於 a leq b leq c leq d ...

四邊形不等式優化dp

對四邊形不等式優化dp的理解 四邊形不等式適用於優化最小代價子母樹問題,即f i j max min f i k 1 f k j w i j 類似列舉中間點的 dp問題,典型例題石子歸併 如果w函式滿足區間包含的單調性和四邊形不等式,那麼函式 f也滿足四邊形不等式,如果 f滿足四邊形不等式,s i ...

四邊形不等式優化dp

原文 在動態規劃中,經常遇到形如下式的轉台轉移方程 m i,j min w i,j i k j min也可以改為max 上述的m i,j 表示區間 i,j 上的某個最優值。w i,j 表示在轉移時需要額外付出的代價。該方程的時間複雜度為o n 3 下面我們通過四邊形不等式來優化上述方程,首先介紹什麼...