動態規劃練習 環狀石子歸併 四邊形不等式優化

2021-08-20 19:32:23 字數 781 閱讀 1509

思路:環狀的直接在n後面加上a[0]-a[n]變成鏈狀即可。

這題範圍小,如果n<1000,則必須四邊形不等式優化降低複雜度為o(n^2)

code:

#include 

#define inf 0x3f3f3f3f

using namespace std;

const int ax = 4e2+6;

int dp[ax][ax];

int a[ax];

int s[ax][ax];

intsum[ax];

int n ;

int main()

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

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

for( int r = 2 ; r <= n ; r++ )}}

}int res = inf;

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

printf("%d\n",res);

return

0 ;}

注:

四邊形不等式優化講解:

證明:

應用:

s[i][j]記錄dp[i][j]取得最優解的k,每次只需要將k從s[i][j-1] 到 s[i+1][j]列舉即可。

石子合併 四邊形優化

動態規劃的經典題目,在遇到狀態轉移方程像min w i k w k 1 j m i j 的時候就可以使用考慮使用四邊形優化。在i i j j 的條件滿足的情況下,有w i j w i j w i j w i j 那麼就可以使用s i j 同時s i j 又有單調遞增性 並沒有仔細看 以後有時間一定補...

石子合併 四邊形優化

description 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。input 第一行是乙個數n。以下n行每行乙個數a,表示石子數目。outpu...

四邊形優化

匆匆忙忙搞了一下四邊形優化,也就是做了幾道入門題而已 四邊形不等式詳解 反正我就記住這句話 判斷w是否為凸即判斷 w i,j 1 w i,j 的值隨著i的增加是否遞減 hdu 2829 include include include using namespace std define maxn 1...