【题目大意】

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

【思路】

先预处理每一行可行的状态(即单行中左右没有相邻的1),存放到usable中。

然后预处理usable中两两之间能否相互转换,存放到map中。

f[i][j][k]第i行,已用去j个国王,当前行状态为usable[k]的情况,四重循环暴力递推即可!

这里用了usable按道理应该会快一些,但是和popoqqq的速度是一样的?不过这个优化应该是有效的!

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=;
const int MAXK=;
const int MAXM=;
int n,m;
int map[MAXN][MAXN];
ll f[MAXM][MAXK][MAXN];//f[i][j][k]第i行,已用去j个国王,当前行状态为k
int usable[MAXN];
int digit[MAXN]; int Usable(int x)
{
if (x<<&x || x>>&x) return ;else return ;
//不能有相邻的1
} int get_digit(int x)
{
int ret=;
while (x) ret+=x&,x>>=;
return ret;
} int Judge(int x,int y)
{
if (x&y || (x<<)&y || (x>>)&y) return ;else return ;
/*不可行的情况有三种*/
} void init()
{
memset(usable,,sizeof(usable));
memset(map,,sizeof(map));
for (int i=;i<<<n;i++)
if (Usable(i)) usable[++usable[]]=i;
/*预处理可行的状态(左右不能有相邻的1)*/
for (int i=;i<=usable[];i++)
for (int j=;j<=usable[];j++)
{
if (Judge(usable[i],usable[j])) map[i][j]=;
}
/*预处理可行的状态中能够转换的状态*/
for (int i=;i<=usable[];i++) digit[i]=get_digit(usable[i]);
/*预处理每一个可行状态中1的个数*/
} ll dp()
{
memset(f,,sizeof(f));
f[][][]=;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
for (int k=;k<=usable[];k++)
if (digit[k]<=j)
{
for (int l=;l<=usable[];l++)
{
if (map[l][k] && digit[l]+digit[k]<=j)
f[i][j][k]+=f[i-][j-digit[k]][l];
}
}
ll ret=;
for (int i=;i<=usable[];i++) ret+=f[n][m][i];
return ret;
} int main()
{
scanf("%d%d",&n,&m);
init();
cout<<dp()<<endl;
return ;
}

【状态压缩DP】BZOJ1087-[SCOI2005]互不侵犯King的更多相关文章

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

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

  2. 状压入门--bzoj1087: [SCOI2005]互不侵犯King【状压dp】

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

  3. [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)

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

  4. bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp

    唔...今天学了状压就练练手... 点我看题 这题的话,我感觉算是入门题了QAQ... 然而我还是想了好久... 大致自己推出了方程,但是一直挂,调了很久选择了题解 坚持不懈的努力的调代码. 然后发现 ...

  5. [bzoj1087][scoi2005]互不侵犯king

    题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...

  6. BZOJ1087 [SCOI2005]互不侵犯King 状态压缩动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1087 题意概括 在n*n的棋盘上面放k个国王,使得他们互相无法攻击,问有多少种摆法. 题解 dp[ ...

  7. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  8. bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...

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

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

随机推荐

  1. js实现页面触摸滑动

    先设置一个div  高度不能设置100% . window.addEventListener("load",function(){ var addEventListener = ' ...

  2. React 开发常见报错解决方法

    1. 使用 redux 的异步 action 时浏览器报错: Error: Actions must be plain objects. Use custom middleware for async ...

  3. 全排列---(dfs)

    全排列输入一个数n,按字典序输出1-n的全排列 #include "cstdio" #include "cstring" ],ans[],n; void dfs ...

  4. C语言编译各过程

    1.预处理 此阶段主要完成#符号后面的各项内容到源文件的替换,往往一些莫名其妙的错误都是出现在头文件中的,要在工程中注意积累一些错误知识. (1).#ifdef等内容,完成条件编译内容的替换 (2). ...

  5. TCP(二)

    TCP半连接和全连接问题 TCP握手过程详解 如上图所示,关键部分:syns queue(半连接队列)和accept queue(全连接队列) 正常情况下的处理过程如下: 1)当server端收到cl ...

  6. idea真不习惯啊

    http://blog.csdn.net/z69183787/article/details/41416189

  7. ecma 2018, javascript spread syntax behaves like Object.assign

    as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...

  8. DotNETCore 学习笔记 日志

    Logging --------------------------------------------------------------------------------------- Impl ...

  9. GridPanel分页条插件

    GridPanel的分页条没有设置当前页显示条数的功能,会不大方便 主要是抄袭的http://www.cnblogs.com/badwps/archive/2011/04/15/2016440.htm ...

  10. 【洛谷】xht模拟赛 题解

    前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...