pascal 石子归并问题有n堆石子排成一列,每堆石子有一个重量w[i],每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 05:58:07
pascal 石子归并问题有n堆石子排成一列,每堆石子有一个重量w[i],每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达
pascal 石子归并问题
有n堆石子排成一列,每堆石子有一个重量w[i],每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小.
程序:
program qwe;
var i,j,k,n:longint;
a:array[1..100] of longint;
f,t:array[0..100,0..100] of longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do
for j:=i to n do
t[i,j]:=t[i,j-1]+a[j]; 这个是拿来干嘛的
for i:=1 to n-1 do
for j:=1 to n-i do begin 为什么是这样循环 ,而不是for i:=1 to n-1 do
for j:=i+1 to n do
f[j,j+i]:=maxlongint;
for k:=j to i+j-1 do
if f[j,k]+f[k+1,i+j]
pascal 石子归并问题有n堆石子排成一列,每堆石子有一个重量w[i],每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达
t[i,j]表示第i堆到第j堆的石子的总和
三重循环分别表示
for i.表示长度减一
for j.表示枚举起始位置
for k.表示枚举这一堆由哪两堆合并