洛谷1880 石子合併

2021-07-30 12:57:15 字數 1102 閱讀 8417

在乙個園形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。

試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.

輸入格式:

資料的第1行試正整數n,1≤n≤100,表示有n堆石子.第2行有n個數,分別表示每堆石子的個數.

輸出格式:

輸出共2行,第1行為最小得分,第2行為最大得分.

輸入樣例#1:

4

4 5 9 4

輸出樣例#1:

43

54

上午做題的時候,乙個小同學問我此題,說實話我並沒有做過環形的石子合併,這也算是練了練手

np[i][j]代表從i開始長度為j的一段石子合併起來的最小成績

xp[i][j] 代表從i開始長度為j的一段石子合併起來的最大成績

關於環形怎麼解決,請看圖

對於n種石子的情況,就會有n種計算方法,在這n個方法中取個最大或最小即可。

(藍色石子是複製品)

**這次寫的比較工整

#includeusing

namespace

std;

int n,st[210],sum[210][210

];int xp[210][210],np[210][210

],mn,mx;

intmain()

for(int i=1;i<=n*2-1;i++)sum[1][i]=st[i]+sum[1][i-1

];

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

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

sum[i][j]=sum[1][j]-sum[1][i-1

];

for(int i=n*2;i>=1;i--)}}

mn=99999999

;

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

cout

}

洛谷1880 石子合併

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

洛谷 1880 石子合併

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

洛谷P1880 石子合併

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