讨论 / 。。只有90分的PASCAL程序。。
kytdfy 2010-11-08 21:06:00
点我顶贴 收藏 删除
program ce;

var

a:array[1..20004] of int64;

i,n,l,j:longint;

m,ans,t:int64;

f:array[1..20004,1..2] of int64;

function min(x,y:int64):int64;

begin

if x>y then min:=y

else min:=x;

end;

begin

readln(n,m);

for i:=1 to n do

begin

read(a[i]);

a[n+i]:=a[i];

end;

t:=0;

ans:=1000000000000;

for l:=1 to n do

begin

for i:=1 to 2*n+1 do

for j:=1 to 2 do

f[i,j]:=0;

for i:=2 to n+1 do

begin

inc(t);

if t>4000000 then

begin

writeln(ans);

halt;

end;

if a[i+l-2]<a[i+l-1] then

begin

f[i+l-1,1]:=min(f[i+l-2,1]+a[i+l-1]-a[i+l-2],f[i+l-2,2]+m+a[i+l-1]-a[i+l-2]);

f[i+l-1,2]:=min(f[i+l-2,1]+m+sqr(a[i+l-1]-a[i+l-2]),f[i+l-2,2]+sqr(a[i+l-1]-a[i+l-2]));

end

else

begin

f[i+l-1,2]:=min(f[i+l-2,2]+a[i+l-2]-a[i+l-1],f[i+l-2,1]+m+a[i+l-2]-a[i+l-1]);

f[i+l-1,1]:=min(f[i+l-2,2]+m+sqr(a[i+l-1]-a[i+l-2]),f[i+l-2,1]+sqr(a[i+l-1]-a[i+l-2]));

end;

end;

if ans>min(f[n+l,1],f[n+l,2]) then ans:=min(f[n+l,1],f[n+l,2]);

end;

writeln(ans);

end.

#1 萧风瑟@2010-11-08 20:53:00
回复 删除
将t>4000000改为t>9500000就Ok了!!!!
#2 萧风瑟@2010-11-08 20:55:00
回复 删除
你这到程序到底是什么意思??
#3 萧风瑟@2010-11-08 20:57:00
回复 删除
for i:=1 to 2*n+1 do

for j:=1 to 2 do

f[i,j]:=0;

可以直接写为 fillchar(f,sizeof(f),0);

#4 萧风瑟@2010-11-08 21:02:00
回复 删除
tyvj上有解题报告,麻烦些,但省时
#5 pkf@2010-11-08 21:06:00
回复 删除
我呸楼上那个

我看那10分是某人故意错的

查看更多回复
提交回复