Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:没问题吧。我就是从左往右串的,也是从左往右搜的,就过了。In Reply To:貌似题目里定义的字典序有点问题 Posted by:Felicia at 2007-12-24 21:12:17 RT var a,b:array[0..16,0..16]of longint; c,d,e:array[0..16,0..16]of boolean; n,m,i,j,ans:longint; bool:boolean; procedure click(x,y:longint); begin a[x,y]:=1-a[x,y]; a[x+1,y]:=1-a[x+1,y]; a[x-1,y]:=1-a[x-1,y]; a[x,y+1]:=1-a[x,y+1]; a[x,y-1]:=1-a[x,y-1]; c[x,y]:=true; end; procedure resume(x,y:longint); begin a[x,y]:=1-a[x,y]; a[x+1,y]:=1-a[x+1,y]; a[x-1,y]:=1-a[x-1,y]; a[x,y+1]:=1-a[x,y+1]; a[x,y-1]:=1-a[x,y-1]; c[x,y]:=false; end; procedure dfs2(temp:longint); var i,j:longint; begin if temp>=ans then exit; b:=a; d:=c; for i:=1 to n-1 do for j:=1 to m do if a[i,j]=1 then begin inc(temp); if temp>=ans then break; click(i+1,j); end; if temp<ans then begin bool:=true; for i:=1 to n do for j:=1 to m do if a[i,j]=1 then begin bool:=false; break; end; if bool then begin ans:=temp; e:=c; end; end; a:=b; c:=d; end; procedure dfs1(x,temp:longint); begin if x>m then begin dfs2(temp); exit; end; dfs1(x+1,temp); click(1,x); dfs1(x+1,temp+1); resume(1,x); end; begin readln(n,m); for i:=1 to n do for j:=1 to m do read(a[i,j]); ans:=maxlongint; dfs1(1,0); //writeln(ans); if ans=maxlongint then writeln('IMPOSSIBLE') else for i:=1 to n do begin for j:=1 to m-1 do if e[i,j] then write(1,' ') else write(0,' '); if e[i,m] then writeln(1) else writeln(0); end; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator