題目傳送門
題意:石子合併問題一般來說都是o(n^3)的複雜度,如果用四邊形不等式優化的話可以使時間複雜度降低到o(n^2)的複雜度,但是這個題目的資料範圍是40000,所以這個題要用到garsiawachs演算法,可以使時間複雜度降到o(n*logn),從而解決這個題目。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 50010
#define maxe 40
#define inf 1e9
#define mod 100003
#define ll long long
#define ull unsigned long long
#define pi 3.14159
using
namespace
std;
int stone[maxn];
int sum = 0;
int cnt = 1;
void combine(int k)
cnt--;
int pos = k - 1;
while (pos && stone[pos - 1] < temp)
stone[pos] = temp;
while (pos >= 2 && stone[pos] >= stone[pos - 2])
}int main()
for (int i = 1; i < n; ++i)
}while(cnt > 1)
combine(cnt - 1);
cout
<< sum << endl;
return
0;}
BZOJ3229 石子合併
description 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。input 第一行是乙個數n。以下n行每行乙個數a,表示石子數目。outpu...
BZOJ 3229 Sdoi2008 石子合併
時間限制 3 sec 記憶體限制 128 mb 提交 497 解決 240 提交 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。第一行是乙個數n。...
區間dp(石子合併,BZOJ 1260 塗色)
石子合併 思路 1 l 區間dp for int i 1,j 1 l j n i j for int k i k f i j min f i j f i k f k 1 j s j s i 1 printf d n f 1 n return0 cqoi2007 塗色paint 題意 開始你有乙個空白...