四邊形不等式

2021-08-10 04:18:33 字數 2142 閱讀 6903

總結一下最近幾天對dp優化中的四邊形不等式的學習。

證明什麼的似懂非懂,我還是太年輕了。

第一種, n^2 -> nlogn

例題:  (由於許可權問題 不公開題面)

就是1個體積均為1-300,100000個物品,做乙個100000的揹包。

發現體積最多只有 300 種,分開做。對於同種體積的物品,顯然按照價值從大到小取最優。

我們假設 s=1,設狀態 f[i]為大小為 i的揹包的最大收益。

轉移函式 f[i]=max(f[ i-j ]+sum(a[1..j]))

是乙個  f[x]=min的經典模型

w滿足大區間大於等於小區間的性質,

且當 a於是 決策有單調性 ,假如用

k(x)

表示狀態

x 取到最優值時的決策 , k(x) 是不降的。

注意到給定兩個決策點,我們是可以通過二分計算出令他們大小關係反轉的時間點 t 的。

於是就可以維護乙個單調棧,進行二分。

對於其他的 s,發現只有在狀態模 s 同余時單調性才成立,所以對於每一種體積 s,按照剩餘類的順序依次做即可。

時間複雜度 o(maxs*k+n)

code :

#includeusing namespace std;

typedef long long ll;

#define rep(i,l,r) for(int i=l;i<=r;++i)

#define per(i,r,l) for(int i=r;i>=l;--i)

template void chmin(t &x,const t &y)

template void chmax(t &x,const t &y)

#define mid (l+r>>1)

int erfen()

int main()

dp[0][0]=0;

for(s=1;s<=300;++s)

top=0;

for(int i=t[s];i;i=l[i].next) q[++top]=l[i].v;

sort(q+1,q+top+1,greater() );

rep(i,1,top)val[i]=val[i-1]+q[i];

rep(i,top+1,m)val[i]=0;

for(d=0;dtail)

else

if(you(st[tail],mi))

dp[s][i*s+d]=get(st[head],i);

}} }

rep(i,1,m)printf("%lld ",dp[300][i]);

}

第二種:n^3-> n^2

(1)區間包含的單調性:如果對於i≤i'(2)四邊形不等式:如果對於i≤i'下面給出兩個定理

定理一:如果上述的w函式同時滿足區間包含單調性和四邊形不等式性質,那麼函式m也滿足四邊形不等式性質。

我們再定義s(i,j)表示m(i,j)取得最優值時對應的下標(即i≤k≤j時,k處的w值最大,則s(i,j)=k)。此時有如下定理

定理二:假如m(i,j)滿足四邊形不等式,那麼s(i,j)單調,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)。

例題:  poj1160

code

#include#include#define maxd 310

#define maxp 40

#define inf 0x3f3f3f3f

int n, p, f[maxd][maxd], a[maxd], a[maxd], k[maxd][maxd];

void init()

}int getw(int x, int y)

void solve()

for(p = 1; p <= n - p; p ++)}}

printf("%d\n", f[p][n]);

}int main()

return 0;

}

本來無法理解三重迴圈為何n^2,後來模擬了一遍,

從小區間推向大區間即從dp方陣的每條對角線(好吧不是對角線 就是表達那個意思)從中間向兩邊轉移,

,每條對角線的轉移時o(n)的,然後有o(n)條對角線,於是就o(n^2)了,太神了%%%。

四邊形不等式

若有函式 a i,j 令 i,若有 a i j a i 1 j 1 le a i j 1 a i 1 j 則我們稱函式 a 滿足四邊形不等式。若我們在 dp 過程中會用到類似如下形式的方程 dp i j min dp k j or dp i k dp k 1 j w i j 那麼,只要代價函式 w ...

四邊形不等式相關

四邊形不等式,即 w i j w i j w i j w i j 其中 i i j j 順便推薦兩篇 四邊形不等式 動態規劃演算法優化技巧 我是這麼總結的 1 狀態轉移方程形如 f i opt 其中b i j i 1 說明 b i 是根據題目描述的可以決策狀態i的左邊界,w j i 是狀態j轉移到狀...

DP 四邊形不等式

by qw 關於四邊形不等式或石子合併的資料。網上有很多。但有不少都是語焉不詳,直接拋給你幾個結論,讓人很難理解。這篇文章將以石子合併為例。證明關於四邊形不等式的一些結論。算是乙個溫習。題面 在乙個操場上擺放著一排n n 20 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成...