求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)描述 Description在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 00:30:47
求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)描述 Description在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成

求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)描述 Description在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成
求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)
描述 Description
在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.
设计一个程序,计算出将N堆石子合并成一堆的最小得分.
【输入输出格式 Input/Output Format】
输入格式 Input Format
第一行为一个正整数N (2≤N≤100);
以下N行,每行一个正整数,小于10000,分别表示第i堆石子的个数(1≤i≤N).
输出格式 Output Format
为一个正整数,即最小得分.
【输入输出样例 Input/Output Sample】
样例输入 Sample Input
7
13
7
8
16
21
4
18
样例输出 Sample Output
239

求石子归并(直线型)样例分析?输入 7 13 7 8 16 21 4 18 输出 239(pascal)描述 Description在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成
dp
var
a:array[0..1000] of longint;
data:array[-1..300,-1..300] of longint;
f:array[0..300,0..300] of longint;
ff:array[0..300,0..300] of longint;
maxans,minans,i,j,k,p,n:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function min(a,b:longint):longint;
begin
if an then
p:=i+k-n;
f[i,j]:=max(f[i,j],f[i,k]+f[p,j-k]+data[i,k]+data[p,j-k]);
if ff[i,j]=0 then
ff[i,j]:=ff[i,k]+ff[p,j-k]+data[i,k]+data[p,j-k]
else
ff[i,j]:=min(ff[i,j],ff[i,k]+ff[p,j-k]+data[i,k]+data[p,j-k]);
end;
maxans:=0;
minans:=maxlongint;
for i:=1 to n do
begin
maxans:=max(maxans,f[i,n]);
minans:=min(minans,ff[i,n]);
end;
writeln(minans);
writeln(maxans);
end.