區間 石子合併

2021-10-01 09:24:42 字數 902 閱讀 3172

題目描述

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

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

輸入格式

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

第 22 行有 nn 個整數,第 ii 個整數 a_iai​

表示第 ii 堆石子的個數。

輸出格式

輸出共 22 行,第 11 行為最小得分,第 22 行為最大得分。

輸入輸出樣例

輸入 #1複製

44 5 9 4

輸出 #1複製

4354

#include

#include

using

namespace std;

int dp[

1001][

1001];

int pre[

1001];

int a[

1001];

int ***[

1001][

1001];

int ansa,ansi=

1e9;

intmain()

for(

int i=n+

1;i<=

2*n;i++

)//2*n是因為石子為環;

for(

int len=

2;len<=n;len++

)//由於長度為一時合併就是自身所以從二開始;}}

for(

int i=

1;i<=n;i++

) cout

}

石子合併 (區間DP

問題描述 在乙個操場上擺放著一行共n堆的石子。現要將石子有序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請編輯計算出將n堆石子合併成一堆的最小得分和將n堆石子合併成一堆的最大得分。輸入檔案 輸入第一行為n n 1000 表示有n堆石子,第二行為n個用空...

石子合併 區間dp

有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。假設dp 1 4 表示將區間1 4的石子合併所花費的代價。dp 1 4 可以劃分為dp 1 1 dp 2...

石子合併 (區間DP)

題目鏈結 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入第一行有乙個整數n,表示有n堆石子。接下來的一行有n 0 n 200 個數,分別表示...