一个n*n的棋盘,在每一行,每一列只能放一个棋子,问有多少种方法。
比如:n=4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
就是每列都有一个 并且每行有一个,这样 ,挨,我这么说你懂我意思吧。
#include <bits/stdc++.h>
using namespace std;
int dp[1<<20];
int main()
{
memset(dp,0,sizeof(dp));
dp[0]=1;
int n;
cin>>n;
for(int st=0;st<(1<<n);st++)
{
for(int i=0;i<n;i++)
{
if(st&(1<<i))
{
int now=st^(1<<i);
dp[st]+=dp[now];
}
}
}
cout<<dp[(1<<n)-1]<<endl;
}
//dp[1010]=dp[1000]+dp[0010];