hncsyjc 2013-01-19 22:37:00
点我顶贴
收藏
删除
第一次程序:
var
f:array [0..10000,1..2] of longint;
l:array [1..100] of longint;
i,j,n:longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b);exit(a);
end;
begin
readln(n);
for i:=1 to n do read(l[i]);
f[1,1]:=l[1];f[1,2]:=0;
for i:=2 to n do
begin
f[i,1]:=min(f[i-1,1],f[i-1,2])+l[i];
f[i,2]:=min(f[i-1,1],f[i-2,1]);
end;
writeln(min(f[n,1],f[n,2]));
end.
发现数组至少要开10000,否则爆掉
优化版本
var
f:array [-1..10000,1..2] of longint;
i,n,l:longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b);exit(a);
end;
begin
readln(n);
for i:=1 to n do
begin
readln(l);
f[i,1]:=min(f[i-1,1],f[i-1,2])+l;
f[i,2]:=min(f[i-1,1],f[i-2,1]);
end;
writeln(min(f[n,1],f[n,2]));
end.