不是VIP会员,不能显示答案

题目解答

题目:
合并石子
[ 问题描述 ]
今天课间的时候,小明同学在学校的操场上发现了 n 堆大小不一的小石子,小明决定将 它们合并成一堆 , 但现在小明思考着这样一个问题:如何消耗最少的体力,把这 n堆小石子合并成一堆?现已知合并所消耗的体力等于每次合并两堆小石子的重量之和 , 每次合并,他会把其中的两堆小右子合并到一起, n堆小石子经过 n-ii 合并之后就只剩一堆了。
比如,n=3时表示共有 3 堆每堆重量分别是么 2、1、9。一种合并方案是 2 和 9 合并,新堆重量是 11,耗费体力为 11;接着 11 与 1 合并新堆重量是 12,耗费体力为 12, 因此总消耗体力是 11+12=23。另一种方案是 12,新堆重量是 3,耗费体力为 3, 接着 3 和 9 合并,新堆重量是 12,耗费体力为 12,因此总消耗体力是 3+12=15。可以证明 这样合并就是最少耗费体 3 的方法。
var i, sum, n: integer;
  a:array[1..100]of integer;
procedure sort(x:integer);
var i, j, temp: integer ;
begin
    for i:= x  to  n-1 do
    for j:=n downto  i+1   do
        if  a[j]<a[j-1]  then
          begin
             temp:=a[j]; a[j] :=a[j-1]; a[j-1] :=temp;
          end ;
end;
begin
  readln(n);
  for i:=1 to n do read (a[i]);
  sum:=0;
  sort(1);
  for i:=1 to n-1 do
  begin
    a[i+1]:=a[i]+a[i+1];
	sum:= sum+a[i+1] ;
	 sort(i+1) ;
  end ;
  writeln(sum);
end. 
考点:
分析:
解答:
评论:
老师: