讨论 / 无语中~
abcwuhang 2009-09-11 02:26:00
点我顶贴 收藏 删除
我的程序把方向弄错了 {把(-1,0,1)弄成(-2,0,2) }竟然还能过两个点,数据太弱~

程:

program rq94;

const fx:array [1..3] of shortint=(-1,0,1);

var s:array [1..100] of string;

f:array [0..101,1..10] of longint;

n,m,j,k:integer;

i:longint;

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

begin

if x>y then exit(y);

exit(x);

end;

function value(y:shortint):boolean;

begin

exit((y>=1) and (y<=m));

end;

function calc(x:shortint;y:integer;z:shortint):shortint;

var code,xx,yy,zz:integer;

begin

val(s[y-1][z],xx,code);

val(s[y-2][z],yy,code);

if x<>2 then calc:=yy

else calc:=xx+yy;

end;

begin

readln(n,m);

for i:=1 to n do

begin

readln(s[i]);

while pos(’ ’,s[i])>0 do

delete(s[i],pos(’ ’,s[i]),1);

end;

for i:=1 to m do

f[n+1,i]:=0;

for i:=1 to n do

for j:=1 to m do

f[i,j]:=maxlongint;

if odd(n) then

begin

for i:=n div 2 downto 0 do

for j:=1 to m do

for k:=1 to 3 do

if value(j+fx[k]) then f[i*2,j]:=min(f[i*2,j],f[i*2+2,j+fx[k]]+calc(k,i*2+2,j))

end

else

for i:=(n div 2)-1 downto 0 do

for j:=1 to m do

for k:=1 to 3 do

if value(j+fx[k]) then f[i*2+1,j]:=min(f[i*2+1,j],f[i*2+3,j+fx[k]]+calc(k,i*2+3,j));

i:=maxlongint;

if odd(n) then

for j:=1 to m do

i:=min(i,f[0,j])

else

for j:=1 to m do

i:=min(i,f[1,j]);

writeln(i);

end.

#1 webeskycn@2009-09-11 02:26:00
回复 删除
这就叫数据弱啊??

- -b

查看更多回复
提交回复