Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 1 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
Output
For each test case, output one line containing the maximum number of blockhouses that can be placed in the city in a legal configuration.
Sample Input
4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0
Sample Output
5 1 5 2 4
Source
Zhejiang University Local Contest 2001
#include<iostream> #include<cstdio> using namespace std; int map[5][5],n,ans,m; int visited[5][5],flag; void DFS(int s){ if(s==n*n){ if(ans<m) ans=m; return; } int i,j,k; i=s/n,j=s%n; if(!visited[i][j]){ flag=0; if(map[i][j]) flag=1; for(k=i-1;k>=0 && !flag;k--){ if(map[k][j]) break; if(visited[k][j]){ flag=1; break; } } for(k=j-1;k>=0 && !flag;k--){ if(map[i][k]) break; if(visited[i][k]){ flag=1; break; } } if(!flag){ m++; visited[i][j]=1; DFS(s+1); m--; visited[i][j]=0; DFS(s+1); }else DFS(s+1); } } int main(){ //freopen("input.txt","r",stdin); char ch; while(cin>>n && n){ ans=m=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ cin>>ch; map[i][j]=(ch=='X'); visited[i][j]=0; } DFS(0); printf("%d\n",ans); } return 0; }