唐山一中05届oiers吧 关注:3贴子:198
  • 4回复贴,共1

USACO 1.4.1 Checker Challenge 超强剪枝

只看楼主收藏回复

{
ID:hbtssam1
PROG:checker
LANG:PASCAL
}
Var
  x:array[1..13] of integer;
  a,b,c:array[-13..26] of boolean;
  sum:longint;
  n:integer;
Procedure try(i:integer);
var
  j,k:integer;
begin
  for j:=1 to n do
   if a[j] and b[i+j] and c[i-j] then
    begin
      x[i]:=j;
      a[j]:=false;
      b[i+j]:=false;
      c[i-j]:=false;
      if i<n then try(i+1) else
         begin
           if sum<3 then
              begin
                write(x[1]);
                for k:=2 to n do write(' ',x[k]);
                writeln;
              end;
           inc(sum);
           if sum>23456 then begin inc(sum,50255); exit;end;
         end;
      a[j]:=true;
      b[i+j]:=true;
      c[i-j]:=true;
    end;
end;
Begin
  fillchar(a,sizeof(a),true);
  fillchar(b,sizeof(b),true);
  fillchar(c,sizeof©,true);
  sum:=0;
assign(input,'checker.in');
assign(output,'checker.out');
reset(input);
rewrite(output);
  readln(n);
  try(1);
  writeln(sum);
close(output);
End.



1楼2005-12-04 10:56回复
    大家请注意 
     if sum>23456 then begin inc(sum,50255); exit;end;
    哈哈 ryh 比你写的隐蔽


    2楼2005-12-04 10:57
    回复
      希望别被封 估计他只会用程序找一下有没有73712 rhy你的很危


      3楼2005-12-04 11:04
      回复
        没关系,我的都一周了,也没被封


        4楼2005-12-04 12:23
        回复
          有个cheat天才......


          5楼2008-07-09 21:42
          回复