動態規劃的經典題目,在遇到狀態轉移方程像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]又有單調遞增性(並沒有仔細看**。。。以後有時間一定補上)下面就上一下**,如果沒有優化,1000量級的演算法執行會超過一秒,但是經過優化後就會在50ms左右。(也能通過這次ccf的第四題)
#include #include #include #define min(a,b) (((a)<(b))?(a):(b))
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1005;
int dp[maxn][maxn];
int sum[maxn];
int s[maxn][maxn];
int n;
void solve ()
for (int l = 2 ; l <= n ; l++) }}
}cout << dp[1][n] << endl;
}int main ()
solve();
}
石子合併 四邊形優化
description 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。input 第一行是乙個數n。以下n行每行乙個數a,表示石子數目。outpu...
石子合併 四邊形不等式優化
藍橋杯 演算法提高 石子合併 很明顯的區間dp,d i,j 表示取第i堆到第j堆石子最少花費,轉移方程d i,j min d i,k d k 1,j sum j sum i 四邊形a b c d,有w b,c w a,d 滿足決策單調性 且w a,c w b,d w b,c w a,d 滿足四邊形不...
合併石子 四邊形不等式優化
有一排石子,共n 堆。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。首先由直接動態規劃的方法來做,即 for int i 1 i n i for int j i j n j f...