动态规划,较难自行理解。
代码:
const
maxn=1000;
var
a:array[0..maxn] of longint;
f:array [0..maxn,-1000..maxn] of longint;
i,j,min,n:longint;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(f),$7);
f[0,1]:=0;
for i:=1 to n do
for j:=n downto 1 do
begin
if f[i,i+j]+a[j]<f[i,j] then f[i,j]:=f[i,i+j]+a[j];
if f[i-1,j-i]+a[j]<f[i,j] then f[i,j]:=f[i-1,j-i]+a[j];
end;
min:=f[1,n];
for i:=2 to n do
if f[i,n]<min then min:=f[i,n];
writeln(min);
end.