棋盘放车(DP状态压缩)
2017-09-03 16:29
411 查看
在n*n(n≤20)的方格棋盘上放置 n 个车(可以攻击所在行、列),求使它们不能互相攻击的方案总数。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF=(1<<20)-1;
long long f[INF];
int main()
{
int n;
scanf("%d",&n);
long long i,S,j;
f[0]=1;
for(S=1;S<=(1<<n)-1;++S) //遍历所有的状态
{
for(i=1;i<=n;++i) //把S的每个1变成0,累加
{
if(( S & 1<<(i-1))>0)//状态S的第i列有棋子,
{
long long s=S^1<<(i-1);//去掉第i列的1
f[S]+=f[s];
}
}
}
printf("%lld\n",f[(1<<n)-1]); //注意要用 lld才能得到正确结果
return 0;
}
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF=(1<<20)-1;
long long f[INF];
int main()
{
int n;
scanf("%d",&n);
long long i,S,j;
f[0]=1;
for(S=1;S<=(1<<n)-1;++S) //遍历所有的状态
{
for(i=1;i<=n;++i) //把S的每个1变成0,累加
{
if(( S & 1<<(i-1))>0)//状态S的第i列有棋子,
{
long long s=S^1<<(i-1);//去掉第i列的1
f[S]+=f[s];
}
}
}
printf("%lld\n",f[(1<<n)-1]); //注意要用 lld才能得到正确结果
return 0;
}
相关文章推荐
- [CodeVs1050]棋盘染色2(状态压缩DP)
- poj1321 棋盘问题,状态压缩dp
- poj 1321 状态压缩dp-棋盘问题
- POJ 1321 棋盘问题(状态压缩DP)
- POJ 1321 棋盘问题 DFS 和 状态压缩DP
- 棋盘放车(有些点不能放)(DP状态压缩)
- 状态压缩DP-棋盘模型总结
- POJ 1321 棋盘问题(状态压缩DP | DFS)
- 状态压缩DP-棋盘模型总结
- POJ 2411 压缩状态DP
- HDU 3001(状态压缩dp)
- uva 11795 Mega Man's Mission(动态规划-状态压缩DP)
- hdu1074 状态压缩DP
- CF 259div2 D (状态压缩dp)
- Chapter06-Mondriaan's Dream(POJ 2411)(状态压缩DP)
- poj 2411 状态压缩DP 铺砖块
- 状态压缩dp入门[HDU1074][HDU1065][POJ3254][POJ1185][HDU4359][POJ3311][POJ2411]
- poj 1185(状态压缩dp)
- poj 2923 状态压缩dp
- HDU3001——Travelling(状态压缩DP)