讨论 / ACS疯了
cgga 2011-05-27 01:21:00
点我顶贴 收藏 删除
矩阵取数游戏 说我的代码是抄的.....

const maxw=35;

type gjd=array[1..maxw]of longint;

var a:array[1..81,1..81]of integer;

n,m,i,j:integer;

ans:gjd;

dp:array[1..81,1..81]of gjd;

c2:array[0..80]of gjd;

function inttogjd(a:integer):gjd;

var i:integer;

begin

fillchar(inttogjd,sizeof(inttogjd),0);

i:=1;

while a>0 do begin

inttogjd[i]:=a mod 10;

a:=a div 10;

inc(i);

end;

end;

operator +(a,b:gjd)c:gjd;

var i,x:longint;

begin

fillchar(c,sizeof(c),0);

x:=0;

for i:=1 to maxw do begin

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

if i=maxw then break;

x:=c[i] div 10;

c[i]:=c[i] mod 10;

end;

end;

operator *(a:gjd;b:integer)c:gjd;

var i,x:longint;

begin

x:=0;

fillchar(c,sizeof(c),0);

for i:=1 to maxw do begin

c[i]:=a[i]*b+x;

if i=maxw then break;

x:=c[i] div 10;

c[i]:=c[i] mod 10;

end;

end;

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

var i:integer;

begin

for i:=maxw downto 1 do begin

if a[i]>b[i] then exit(a);

if a[i]<b[i] then exit(b);

end;

exit(b);

end;

function dp1(n:integer):gjd;

var i,j,l:integer;

begin

for i:=1 to m do dp[i,i]:=c2[m]*a[n,i];

for l:=1 to m-1 do

for i:=1 to m-l do begin

j:=i+l;

dp[i,j]:=max(dp[i,j-1]+c2[m-l]*a[n,j],dp[i+1,j]+c2[m-l]*a[n,i]);

end;

exit(dp[1,m]);

end;

begin

readln(n,m);

c2[0]:=inttogjd(1);

for i:=1 to 80 do c2[i]:=c2[i-1]*2;

for i:=1 to n do begin

for j:=1 to m do

read(a[i,j]);

readln;

end;

fillchar(ans,sizeof(ans),0);

for i:=1 to n do

ans:=ans+dp1(i);

for i:=maxw downto 1 do

if ans[i]<>0 then break;

for j:=i downto 1 do

write(ans[j]);

writeln;

end.

#1 cgga@2011-05-27 01:21:00
回复 删除
此代码绝对原创

不过可能有人拿我的代码提交过

查看更多回复
提交回复