讨论 / 为什么栈溢出?
b249265450 2012-07-29 18:56:00
点我顶贴 收藏 删除
只过了三个点,其他都是栈溢出,求解!!!

const jin=100000000;

type

c=array[1..10] of longint;

var

s:array[0..100,0..100] of c;

sum:c;

d:array[0..100,0..100] of longint;

i,j,k,n,m:longint;

function max(a,b:c):c;

var t:integer;

begin

for t:=4 downto 1 do

if a[t]>b[t] then exit(a)

else if a[t]<b[t] then exit(b);

exit(a);

end;

function jia(a,b:c):c;

var i,j:longint;

begin

for i:=1 to 3 do

begin

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

a[i+1]:=a[i+1]+a[i] div jin;

a[i]:=a[i] mod jin;

end;

a[4]:=a[4]+b[4];exit(a);

end;

function jia2(a:c;b:longint):c;

begin

a[1]:=a[1]+b;

a[2]:=a[2]+a[1] div jin;

a[1]:=a[1] mod jin;

exit(a);

end;

function f(k1,k2:longint):c;

begin

if s[k1,k2,1]>0 then f:=jia(s[k1,k2],s[k1,k2])

else

begin

s[k1,k2]:=max(jia2(f(k1+1,k2),d[k,k1]),jia2(f(k1,k2-1),d[k,k2]));

f:=jia(s[k1,k2],s[k1,k2]);

end;

end;

begin

assign(input,'game.in');reset(input);

readln(n,m);

for i:=1 to n do

begin

for j:=1 to m-1 do read(d[i,j]);readln(d[i,m]);

end;

close(input);

for k:=1 to n do

begin

fillchar(s,sizeof(s),0);

for i:=1 to m do s[i,i,1]:=d[k,i];

sum:=jia(sum,f(1,m));

end;

assign(output,'game.out');rewrite(output);

for i:=4 downto 1 do

if sum[i]>0 then

begin

write(sum[i]);break;

end;

dec(i);

if (i=0) and (sum[1]=0) then write('0');

while i>0 do

begin

if sum[i] div 10=0 then write('0000000')

else if sum[i] div 100=0 then write('000000')

else if sum[i] div 1000=0 then write('00000')

else if sum[i] div 10000=0 then write('0000')

else if sum[i] div 100000=0 then write('000')

else if sum[i] div 1000000=0 then write('00')

else if sum[i] div 10000000=0 then write('0');

write(sum[i]);

dec(i);

end;

writeln;

close(output);

end.

#1 b249265450@2012-07-29 18:56:00
回复 删除
补充

用了大数据测 if s[k1,k2,1]>0 then f:=jia(s[k1,k2],s[k1,k2]) 这句超界了

查看更多回复
提交回复