SDOI2008 石子合併 題解

2022-07-13 20:09:16 字數 655 閱讀 2422

題面

garsiawachs演算法專門解決石子合併問題:

設乙個序列是a[0..n-1],每次尋找最小的乙個滿足a[k-1]<=a[k+1]的k,那麼我們就把a[k]與a[k-1]合併,並向前尋找乙個第乙個超過他們的和的數,把這個數插入到他後面;

#include#define inc(i,a,b) for(register int i=a;i<=b;i++)

#define dec(i,a,b) for(register int i=a;i>=b;i--)

using namespace std;

long long ans,n;

vectorl;

int merge()

}register int tmp=l[k]+l[k+1];

l.erase(l.begin()+k);

l.erase(l.begin()+k);

register int in=-1;

dec(i,k-1,0)

}l.insert(l.begin()+in+1,tmp);

return tmp;

}int main()

inc(i,0,n-2) ans+=merge();

cout

}

BZOJ 3229 Sdoi2008 石子合併

時間限制 3 sec 記憶體限制 128 mb 提交 497 解決 240 提交 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。第一行是乙個數n。...

282 石子合併

設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...

2298 石子合併

2008年省隊選拔賽山東 時間限制 1 s 空間限制 256000 kb 題目等級 gold 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。輸入描...