互不侵犯king (状压dp)

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。\(1\le n\le 9,0\le k\le n*n\)。

  这道题如果普通dfs肯定会超时。为什么呢?我们发现一行中的状态是固定的,同时行与行之间的冲突情况也是固定的。而dfs重复枚举了每一行的状态,重复判断了这一行的状态是否与前一行相冲突。于是我们预处理出一行中的状态,同时预处理出两行状态的冲突情况,然后dp就行了。\(f[i][j][k]\)表示枚举到第i行,有j个国王,当前行状态的编号为k。它只能通过不与k冲突的上一行转移而来。于是就过了。

#include <cstdio>
using namespace std; long long st[100];
int cnt[100], now[10], map[100][100];
int n, k, cntst;
long long f[10][100][100]; void dfs(int pos){
now[pos]=1;
long long tmp=0; ++cntst;
for (int i=1; i<=n; ++i){
tmp=(tmp<<1)+now[i];
cnt[cntst]+=now[i];
}
st[cntst]=tmp;
for (int i=pos+2; i<=n; ++i) dfs(i);
now[pos]=0;
} int main(){
scanf("%d%d", &n, &k);
st[0]=0; cnt[0]=0;
for (int i=1; i<=n; ++i) dfs(i);
for (int i=0; i<=cntst; ++i)
for (int j=0; j<=cntst; ++j)
if ((st[i]&st[j])==0&&
((st[i]<<1)&st[j])==0&&
((st[i]>>1)&st[j])==0){
map[i][j]=1; map[j][i]=1;
}
f[0][0][0]=1;
for (int i=1; i<=n; ++i)
for (int j=0; j<=k; ++j)
for (int st=0; st<=cntst; ++st){
if (cnt[st]>j) continue;
for (int st2=0; st2<=cntst; ++st2){
if (!map[st][st2]) continue;
f[i][j][st]+=f[i-1][j-cnt[st]][st2];
}
}
long long ans=0;
for (int i=0; i<=cntst; ++i)
ans+=f[n][k][i];
printf("%lld", ans);
return 0;
}

最新文章

  1. LeetCode-1TwoSum(C#)
  2. JSTL标签库之核心标签
  3. DEX 方法超过64K限制和gradle编译OOM问题解决
  4. 转:&quot;在已损坏了程序内部状态的XXX.exe 中发生了缓冲区溢出&quot;的一种可能原因
  5. Apache配置多个网站
  6. WPF 虚拟键盘
  7. HTTP Post请求过程详解
  8. Cocos2D-x搭建新环境注意事项
  9. C# Adomd Connection Analysis Service View Cube
  10. 在VM虚拟机中安装centos7
  11. Moving Tables
  12. 玩程序 之 一 . 字符串处理工具(可通过C#脚本扩展)
  13. 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述
  14. MongoDB官网配置项目整理
  15. mybatis逆向工程(MyBatis Generator)
  16. MGR架构~单写模式架构的搭建
  17. 内存proc详解
  18. aspnet-api-versioning
  19. 分分钟让你理解HTTPS
  20. hbase源码系列(十四)Compact和Split

热门文章

  1. python代码docstring生成文档之sphinx
  2. Spring Boot -- actuator
  3. JdbcUtils针对事务问题作出的第三次修改
  4. objdump 命令的用法
  5. TYVJ P1728 普通平衡树
  6. POJ2891Strange Way to Express Integers (线性同余方程组)
  7. Android的各国语言的缩写
  8. bzoj 2648 SJY摆棋子——KDtree
  9. IIC编程1:i2c-tools使用
  10. MongoDB分析工具之二:MongoDB分析器Profile