| ||||||||||
| 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 | |||||||||
用位运算判断这一列是否可以放不停的wa....给几组测试数据吧~
#include<iostream>
using namespace std;
int mark,n,m,sum,num[10];
char chess[10][10];
void init( )
{
int i,j;
memset(num,0,sizeof(num));
for ( i=0 ; i<n ; i++ )
{
scanf("%s",chess[i]);
for ( j=0 ; j<n ; j++ )
if ( chess[i][j]=='#' )
num[i+1]++;
num[i+1]+=num[i];
}
sum=0;
}
void solve ( int line , int cnt )
{
int i ;
if ( line==n )
{
if ( cnt==m )
sum++;
return ;
}
if ( cnt+num[n]-num[line]<m || n-line+1+cnt<m )
return ;
for ( i=0 ; i<n ; i++ )
{
if ( chess[line][i]=='#' && ((mark>>i)&1)==0 )
{
solve(line+1,cnt);
mark|=1<<i;
solve(line+1,cnt+1);
mark^=1<<i;
}
}
}
int main ( )
{
int i,j;
while( scanf("%d%d",&n,&m) && m!=-1 && n!=-1 )
{
init();
for ( i=0 ; i<n ; i++ )
for ( j=0 ; j<n ; j++ )
if ( chess[i][j]=='#' )
{
mark=1<<j;
solve(i+1,1);
}
printf("%d\n",sum);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator