石子合併 BZOJ 3229

2021-08-09 11:44:27 字數 1032 閱讀 6852

題目傳送門

題意:石子合併問題一般來說都是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 題意 開始你有乙個空白...