P1880 NOI1995 石子合併

2022-06-03 08:18:12 字數 689 閱讀 8792

p1880 [noi1995]石子合併

做過類似的,不過這題稍微有點不一樣:是環不是鏈。

只要把鏈複製一遍原來的鏈的後面,就可以化環為鏈了。

注意題目求的是n堆石子合併,列舉區間長度的時候依然是從2列舉到n。

int a[maxn];

int b[maxn];

//字首和

int dp1[maxn][maxn], dp2[maxn][maxn];

int main()

//自己和自己合併得分為0

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

//化環為鏈

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

for (int len = 2; len <= n; len++)

dp1[l][r] += b[r] - b[l - 1];

dp2[l][r] += b[r] - b[l - 1];}}

//長度為n的區間全掃一遍取最大/最小值

int mmax = -1;

int mmin = inf;

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

cout << mmin << endl << mmax << endl;

return 0;

}

P1880 NOI1995 石子合併

在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別表示每堆石...

P1880 NOI1995 石子合併

在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別表示每堆石...

P1880 NOI1995 石子合併

這次還是給大家講解一下dp 我們則需要根據這個題目的實際含義進行變通即可.而區間dp的大致模板是 for int len 2 len n len for int i 1 i len 1 n i 那講到這裡就很自然 一點都不自然 的引入了今天我們要看的一道題,剛才我已經說了最長不下降子串行是線性dp的...