Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

把assign去掉,这里是STDIO的

Posted by TN at 2005-07-13 12:10:33 on Problem 1185
In Reply To:我的程序: Posted by:dfg at 2005-07-13 12:10:03
> Program cannon;
> 
> Const   fin                     ='cannon.in';
>         fout                    ='cannon.out';
> 
> Var     d,l,ld                  :array[1..100]of longint;
>         a                       :array[1..10]of boolean;
>         opt1,opt                :array[1..100,1..100]of longint;
>         ch                      :char;
>         n,m,i,j,p,top,ans,s,max :longint;
> 
> Function binva:longint;
> var     i,v:longint;
> begin
>         v:=0;
>         for i:=1 to m do v:=v shl 1+ord(a[i]);
>         binva:=v;
> end;
> 
> Procedure search(p,r:longint);
> begin
>         if r=0 then begin
>                 inc(top);
>                 d[top]:=binva;
>                 l[top]:=i;
>         end
>         else if p<=m then begin
>                 search(p+1,r);
>                 a[p]:=true;
>                 search(p+3,r-1);
>                 a[p]:=false;
>         end;
> end;
> 
> Function ok(a,b:longint):boolean;
> begin
>         ok:=(a>=b) and (a xor b=a-b);
> end;
> 
> Begin
>         {readin}
>         assign(input,fin); reset(input);
>         readln(n,m);
>         for i:=1 to n do begin
>                 for j:=1 to m do begin
>                         read(ch);
>                         a[j]:=ch='P';
>                 end;
>                 ld[i]:=binva;
>                 readln;
>         end;
>         close(input);
>         {main}
>                 {init}
>         top:=0;
>         fillchar(a,sizeof(a),0);
>                 {dp}
>         if n=1 then ans:=(m-1) div 3+1
>         else begin
>                 for i:=0 to 4 do search(1,i);
>                 for i:=1 to top do if ok(ld[1],d[i]) then
>                 for j:=1 to top do if ok(ld[2],d[j]) then
>                         if d[i] or d[j]=d[i]+d[j] then opt[i,j]:=l[i]+l[j];
>                 for s:=3 to n do begin
>                         opt1:=opt;
>                         for i:=1 to top do if ok(ld[s-1],d[i]) then
>                         for j:=1 to top do if ok(ld[s],d[j]) and (d[i] or d[j]=d[i]+d[j]) then begin
>                                 max:=0;
>                                 for p:=1 to top do
>                                         if ok(ld[s-2],d[p]) and (d[p] or d[i] or d[j]=d[p]+d[i]+d[j]) then
>                                         if max<opt1[p,i]+l[j] then max:=opt1[p,i]+l[j];
>                                 opt[i,j]:=max;
>                         end;
>                 end;
>                 ans:=0;
>                 for i:=1 to top do if ok(ld[n-1],d[i]) then
>                 for j:=1 to top do if ok(ld[n],d[j]) and (d[i] or d[j]=d[i]+d[j]) then
>                         if ans<opt[i,j] then ans:=opt[i,j];
>         end;
>         {printout}
>         assign(output,fout); rewrite(output);
>         writeln(ans);
>         close(output);
> End.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator