在乙個操場上擺放著一行共n堆的石子。現要將石子有序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請編輯計算出將n堆石子合併成一堆的最小得分和將n堆石子合併成一堆的最大得分。【輸入檔案】
輸入第一行為n(n<1000),表示有n堆石子,第二行為n個用空格隔開的整數,依次表示這n堆石子的石子數量(<=1000)
【輸出檔案】
輸出將n堆石子合併成一堆的最小得分和將n堆石子合併成一堆的最大得分。
【輸入樣例】
1 2 3
【輸出樣例】
9 11
#include
#include
using
namespace
std;
const
int maxn = 1000+10;
const
int inf = 2147483647;
int a[maxn],num[maxn];
int da[maxn][maxn] = ;
int di[maxn][maxn] = ;
int n;
int main()
for(int l = 1 ; l < n ; l++ )
for(int i = 1 ; i <= n-l ; i++ )
}cout
<< di[1][n] << " "
<< da[1][n];
return
0;}
nyoj737 石子合併 區間dp
描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入 有多組測試資料,輸入到檔案結束。每組測試資料第一行有乙個整數n,表示有n堆石子。接下來的一行...
acwing 282 石子合併(區間dp)
設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...
ACwing 282 石子合併(區間dp
給出n堆石子,每次只能合併相鄰的兩堆石子,代價為兩堆石子的質量和,求合併所有石子的最小代價。區間dp中i,j表示的是兩個區間的左右端點,操作物件是區間。dp i j 表示合併第i堆石子到第j堆石子的最小代價。對於i,j圍成的區間,以合併的分割線區分不同合併方式,相當於在i,j中插入一塊隔板,dp i...