1087: [SCOI2005]互不侵犯King

Time Limit: 10 Sec Memory Limit: 162 MB

Submit: 5333 Solved: 3101

[Submit][Status][Discuss]

Description

  在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上

左下右上右下八个方向上附近的各一个格子,共8个格子。

Input

  只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

Output

  方案数。

Sample Input

3 2

Sample Output

16

—————————————————————————————-

题解

一看数据范围就能猜出状压dp,dp[i][k][j]表示第i行,一共放了k个棋子,状态为j的方案数。
转移方程:
dp[i][k][j]+=dp[i-1][k-sum[j]][k]
sum[S]为状态S中1的个数。 初值为dp[0][0][0]=1;

代码

#include<bits/stdc++.h>
#define LL long long using namespace std; int n,K,sum[1<<10];
LL dp[15][105][1<<10],ans; inline int update(int x){
int cnt=0;
for(;x;x>>=1)
if(x&1) cnt++;
return cnt;
} int main(){
scanf("%d%d",&n,&K);
for(register int i=0;i<1<<n;i++)
sum[i]=update(i);
dp[0][0][0]=1;
for(register int i=1;i<=n;i++)
for(register int j=0;j<1<<n;j++)
if(!((j&(j<<1)) or (j&(j>>1)))){
for(register int k=0;k<1<<n;k++)
if(!(k&(k<<1) or k&(k>>1) or (k&j) or ((k<<1)&j)
or ((k<<1)&(j<<1)) or ((k>>1)&(j>>1)) or((k>>1)&j))
and sum[k]+sum[j]<=K){
for(register int o=sum[k]+sum[j];o<=K;o++)
dp[i][o][j]+=dp[i-1][o-sum[j]][k];
}
}
for(register int i=0;i<1<<n;i++)
ans+=dp[n][K][i];
cout<<ans<<endl;
return 0;
}

最新文章

  1. Json的语法及使用方法
  2. MVC 的各个部分都有那些技术来实现?如何实现?
  3. Unity3d三大光照渲染介绍
  4. UVA 10254 十八 The Priest Mathematician
  5. HDU 4407
  6. H5不能少的功能-滑动分页
  7. 比较全面的gdb调试命令
  8. 安装ImageMagick扩展出现configure: error: not found. Please provide a path to MagickWand-config or Wand- config program
  9. Android Service命令
  10. Linq之关键字基本查询
  11. Photoshop制作雪碧图技巧
  12. jquery取出checkbox多选的值(带全选功能)
  13. Springboot Application 集成 OSGI 框架开发
  14. WPF TextBlock IsTextTrimmed 判断文本是否超出
  15. python 类与类之间的关系
  16. HDU 2586 How far away ?(经典)(RMQ + 在线ST+ Tarjan离线) 【LCA】
  17. 使用nagios监控ssl证书过期时间
  18. c++数组的引用
  19. django中使用POST方法 获取POST数据
  20. Vue CLI 3 配置兼容IE10

热门文章

  1. docker Dockerfile学习---构建mongodb环境
  2. 生成对抗网络(GAN)的18个绝妙应用
  3. jq-demo-2种吸顶效果
  4. leetcood学习笔记-171-excel表列序号
  5. vue中利用scss实现整体换肤和字体大小设置
  6. JVM虚拟机瓜分内存原则
  7. 【POJ】1797 Heavy Transportation
  8. swt java 内嵌ActiveX控件
  9. 2018-8-10-VisualStduio-打断点调试和不打断点调试有什么区别
  10. JS函数 函数的作用,可以写一次代码,然后反复地重用这个代码。