#1232 互不侵犯

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

输入
只有一行,包含两个数N,K

输出
方案数。

样例输入
3 2

样例输出
16

提示
(1&lt;=N&lt;=9,0&lt;=K&lt;=N∗N)( 1 &lt;=N &lt;=9, 0 &lt;= K &lt;= N * N)(1<=N<=9,0<=K<=N∗N)

SOL
这道题的状态比较好分析——对于每一个当前行的状态,只需要考虑前一行的状态的影响。
对于当前行,相邻的格子不能同时有国王(这个可以预处理),对于连续的两行(即当前行和前一行),上下两个相邻的格子和斜上方相邻的格子不能同时有国王。
但我WA了很多次——这很扯……

代码:

#include<bits/stdc++.h>
#define N 11
#define int long long
using namespace std;
inline int rd(){int register data=0;static char ch=0;while(!isdigit(ch))ch=getchar();while(isdigit(ch))data=(data<<1)+(data<<3)+ch-'0',ch=getchar();return data;
}
inline void write(int x){if(x>9)write(x/10);putchar('0'+x%10);}
int n,k,tot,cnt,f[N][N*N][1<<N],s1[1<<N],sum[1<<N];
signed main(){n=rd();k=rd();tot=1<<n;--tot;for(int register i=0;i<=tot;i++){if(!(i&(i<<1))){s1[++cnt]=i;int register x=s1[cnt];while(x){x&=x-1;sum[cnt]++;}f[1][sum[cnt]][cnt]=1;}}for(int register i=2;i<=n;i++)for(int register pre=1;pre<=cnt;pre++)for(int register now=1;now<=cnt;now++){int register x=s1[pre],y=s1[now];if((x&y)||(x&(y>>1))||(x&(y<<1)))continue;for(int register j=0;j<=k;j++)if(j+sum[now]<=k)f[i][j+sum[now]][now]+=f[i-1][j][pre];}int register ans=0ll;for(int register i=1;i<=cnt;i++)ans+=f[n][k][i];write(ans);return 0;
}

[FROM WOJ]#1232 互不侵犯相关推荐

  1. BZOJ 1087: [SCOI2005]互不侵犯King

    二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...

  2. 状压DP【洛谷P1896】 [SCOI2005]互不侵犯

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

  3. 洛谷P1896 互不侵犯【状压DP】

    题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...

  4. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  5. 洛谷-P1896 [SCOI2005]互不侵犯

    链接:https://www.luogu.org/problemnew/show/P1896 题意: 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 ...

  6. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  7. [BZOJ1087][SCOI2005]互不侵犯King

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

  8. 【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)

    problem 在N×N的棋盘里面放K个国王 每个国王会攻击它周围的一圈共8个格子 使他们互不攻击,共有多少种摆放方案 N <= 9 solution 用01串表示某一行放置的情况 首先枚举当前 ...

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

    题目大意:给定n*n的国际象棋棋盘.在上面放k个国王,要求国王之间互不攻击.求方案数 n<=⑨ 状压DP.将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数 ...

最新文章

  1. Eclipse的Ctrl+鼠标左键的智能化链接配置
  2. Spring容器创建流程(3)对beanFactory设置
  3. Linux下Zend Framework的“Invalid Controller Specified”问题
  4. mysql alter atafter_MySQL 常用操作
  5. Spring 无缝整合 quartz
  6. C#生成JSON数据格式的函数
  7. 深入浅出MFC之6大技术 消息映射及命令传递 DECLARE_MESSAGE_MAP 和 ON_NOTIFY ON_COMMAND ON_MESSAGE 三大难点解析
  8. (转)招商银行这一招,引起了各大银行的注意
  9. 怎样用计算机才能更快,如何让网速变快,详细教您怎么让电脑网速变快
  10. kux2mp4(优酷kux转换为mp4软件) v2021
  11. 大手笔!舒印彪对核电发展表态,华能抢到了核电开发入场券!
  12. 软件测试方法口诀,自测记忆法
  13. Python sys模块常见函数
  14. 除了VR 还有什么能在2016年撬动物联网?
  15. audio_policy.conf文件:AUDIO_DEVICE_IN_REMOTE_SUBMIX含义
  16. 1. Java基础语法
  17. word_state
  18. linux cups工作原理,Linux打印系统CUPS原理分析
  19. PPT在线预览 转换为图片实现方案 Apache POI 实现时踩坑:含嵌入文件ppt转换报错 ArrayStoreException
  20. Python爬取起点小说并保存到本地文件夹和MongoDB数据库中

热门文章

  1. 微信已经成为了一个流量入口,有流量的地方,肯定会有交易
  2. jdbc链接数据库失败的问题
  3. 解密趣头条快跑上市的背后“推手”
  4. chatgpt赋能python:Python数据拼接横向--实现数据重组的简单方式
  5. FreeRadius : rlm_files
  6. 复选框被选中但勾没出来
  7. 爬虫采集全国工商系统的数据(外接打码平台)
  8. Vite为啥如此之快
  9. jd是什么职位(Jd是什么职位的简称)
  10. 【HYSTA Talk】对话美国生鲜电商Weee!创始人Larry—如何快速成长为独角兽企业?