Description

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

Input

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

Output

  方案数。

Sample Input

  3 2

Sample Output

  16
 

Solution

我们很容易的联想到状态压缩动态规划

f[i][j][k][S]表示当前做到(i,j)这个格子共放了k个国王红色部分状态为S的方案数
然后只要枚举当前格子放不放的问题了
红色部分使用状态压缩,而红色部分之前的东西已经不影响答案了
当然可以使用滚动数组
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef long long ll;
int s=,t=,n,m;
ll f[][][],ans=;
il bool chk(int j,int S){
if(j==n) return (S&)==&&(S&)==&&(S&(<<n))==;
else if(j==) return (S&)==&&(S&)==;
return (S&)==&&(S&)==&&(S&(<<n))==&&(S&)==;
}
int main(){
scanf("%d%d",&n,&m);
if(n==){
cout<<"";exit();
}
if(n==){
if(m==) cout<<"";
else if(m==) cout<<"";
else cout<<"";
exit();
}
f[][][]=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
memset(f[t],false,sizeof(f[t]));
for(int S=;S<(<<n+);S++){
for(int l=;l<=m;l++){
if(chk(j,S)) f[t][l+][(S>>)|(<<n)]+=f[s][l][S];
f[t][l][S>>]+=f[s][l][S];
}
}
swap(s,t);
}
}
for(int S=;S<(<<n+);S++) ans+=f[s][m][S];
cout<<ans;
return ;
}
 

【bzoj1087】互不侵犯King的更多相关文章

  1. 【状压DP】bzoj1087 互不侵犯king

    一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...

  2. BZOJ-1087 互不侵犯King 状压DP+DFS预处理

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...

  3. bzoj1087 互不侵犯King 状压dp+bitset

    题目传送门 题目大意:中文题面. 思路:又是格子,n又只有9,所以肯定是状压dp,很明显上面一行的摆放位置会影响下一行,所以先预处理出怎样的二进制摆放法可以放在上下相邻的两行,这里推荐使用bitset ...

  4. bzoj1087互不侵犯King(状压)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087 简单的状压dp.但是wa了好几发.注意long long. 注意0和0的连边.而且不能 ...

  5. bzoj1087互不侵犯King——状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087 水题... 然而犯了两个致命小错误,调了好半天...详见注释. 代码如下: #incl ...

  6. BZOJ1087 SCOI2005 互不侵犯King 【状压DP】

    BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...

  7. 【状态压缩DP】【BZOJ1087】【SCOI2005】互不侵犯king

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3135  Solved: 1825[Submit][ ...

  8. bzoj1087【SCOI2005】互不侵犯King

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2405  Solved: 1413 [Submit ...

  9. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  10. SCOI2005互不侵犯King

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1499  Solved: 872[Submit][S ...

随机推荐

  1. Laya1.x Timer小记

    Timer是时钟管理类,在Laya初始化的时候会创建一个实例,通过Laya.timer访问. TimerHandler TimerHandler是对每一个定时任务的封装,每次调用frameOnce.f ...

  2. Laya LoaderManager小记

    LoaderManager 类用于用于批量加载资源.此类是单例,不要手动实例化此类,请通过Laya.loader访问.全部队列加载完成,会派发 Event.COMPLETE 事件:如果队列中任意一个加 ...

  3. RenderSprite小记

    类型定义: /** @private */ public static const IMAGE:int = 0x01; /** @private */ public static const ALPH ...

  4. iOS分类Category探索

    什么是Category? Category是Objective-C 2.0之后添加的语言特性,Category的主要作用是为已经存在的类添加方法,一般称为分类,文件名格式是"NSObject ...

  5. 6.把建模工具导出的dea文件导入到three.js程序中

    1.使用Three.js渲染导出的DAE 在Three.js中使用Collada(即.dae)文件的话,首先得要用到 ColladaLoader.js. 但是这个ColladaLoader.js并不包 ...

  6. JavaScript学习(1)之JavaScript基础

    JavaScript学习(1)之JavaScript基础 由于工作原因,开发语言逐渐以JavaScript为主,所以,抽空学习了下JavaScript语法.等现阶段的工作稳定之后,陆续会分享下自己在学 ...

  7. python之multiprocessing创建进程

    python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. multiprocessing创建多进程在windows和linux系统下的 ...

  8. 前端_html

    目录 HTML介绍 标签说明 常用标签 <!DOCTYPE>标签 <head>内常用标签 <body>内常用标签 特殊字符 其他:各种各样的标签 HTML的规范 H ...

  9. $.each()用法

    通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...

  10. java第二次试验报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:郭皓  学号:20135327 成绩:             指导 ...