您的位置:首页 > 其它

一道状态压缩DP思想题

2017-04-06 15:13 197 查看
一个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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: