欧阳建昭吧 关注:8贴子:81
  • 1回复贴,共1
program game;
type
 hp=array[0..20]of longint;
var
 n,m,i,j:longint;
 total:hp;
 a:array[0..80]of longint;
 f:array[0..80,0..80]of hp;
 he1,he2,mn:hp;
function max(a,b:hp):hp;
var
 i:longint;
begin
 if a[0]>b[0] then exit(a); 
 if a[0]<b[0] then exit(b);
 for i:=a[0] downto 1 do
  begin
   if a[i]>b[i] then exit(a);
   if b[i]>a[i] then exit(b);
  end;
 exit(a);
end;
function jia(a,b:hp):hp;
var
 i,x:longint;
begin
 fillchar(jia,sizeof(jia),0);
 if a[0]>b[0] then jia[0]:=a[0] else jia[0]:=b[0];
 x:=0;
 for i:=1 to jia[0] do
  begin
    x:=a[i]+b[i]+x;
    jia[i]:=x mod 10000;
    x:=x div 10000;
  end;
 while x<>0 do
  begin
    inc(jia[0]);
    jia[jia[0]]:=x mod 10000;
    x:=x div 10000;
  end;
 exit;
end;
procedure print(a:hp);
var
 i:longint;
begin
 write(a[a[0]]);
 for i:=a[0]-1 downto 1 do
  begin
   if a[i]<10 then write(0);
   if a[i]<100 then write(0);
   if a[i]<1000 then write(0);
   write(a[i]);
  end;
 writeln;
end;
procedure main;
var
 i,j:longint;
begin
 fillchar(f,sizeof(f),0);
 for i:=1 to m do begin f[i,i][0]:=1;f[i,i][1]:=a[i]+a[i];end;
 for i:=m-1 downto 1 do
  for j:=i+1 to m do
   begin
    mn[0]:=1;mn[1]:=a[i];
    he1:=jia(f[i+1,j],mn);
    mn[0]:=1;mn[1]:=a[j];
    he2:=jia(f[i,j-1],mn);
    f[i,j]:=max(he1 , he2);
    f[i,j]:=jia(f[i,j],f[i,j]);
   end;
 total:=jia(total,f[1,m]);
end;
begin
 assign(input,'game.in');reset(input);
 assign(output,'game.out');rewrite(output);
 fillchar(total,sizeof(total),0);
 total[0]:=1;
 readln(n,m);
 for i:=1 to n do
  begin
  fillchar(a,sizeof(a),0);
  for j:=1 to m do
  begin
  read(a[j]);
  end;
  main;
  end;
  print(total);
 close(input);
 close(output);
end.                         


1楼2009-11-18 20:20回复
    顶..!


    2楼2009-11-18 20:22
    回复