環形的處理P1880 NOI1995 石子合併

2022-08-23 11:48:12 字數 584 閱讀 2356

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

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

資料的第 1 行是正整數 n,表示有n堆石子。

第 2 行有 n個整數,第 i 個整數 \(a_i\)表示第 i 堆石子的個數。

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

44 5 9 4

4354

決策容易分析,最優子結構有兩部分

斷環為鏈:將長度為n的鏈複製乙份接在後面,環的情況就是長度為2n的鏈中任意連續的長度為n的鏈。

#includeusing namespace std;

int s[101],a[100],xp[100][100],dp[100][100];

int main()

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

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

cout

}

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的...