[FROM WOJ]#1232 互不侵犯
#1232 互不侵犯
题面
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。
输入
只有一行,包含两个数N,K
输出
方案数。
样例输入
3 2
样例输出
16
提示
(1<=N<=9,0<=K<=N∗N)( 1 <=N <=9, 0 <= K <= 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 互不侵犯相关推荐
- BZOJ 1087: [SCOI2005]互不侵犯King
二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...
- 状压DP【洛谷P1896】 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- 洛谷P1896 互不侵犯【状压DP】
题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...
- 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...
- 洛谷-P1896 [SCOI2005]互不侵犯
链接:https://www.luogu.org/problemnew/show/P1896 题意: 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 ...
- 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)
题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...
- [BZOJ1087][SCOI2005]互不侵犯King
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...
- 【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)
problem 在N×N的棋盘里面放K个国王 每个国王会攻击它周围的一圈共8个格子 使他们互不攻击,共有多少种摆放方案 N <= 9 solution 用01串表示某一行放置的情况 首先枚举当前 ...
- BZOJ 1087 SCOI2005 互不侵犯King 状压DP
题目大意:给定n*n的国际象棋棋盘.在上面放k个国王,要求国王之间互不攻击.求方案数 n<=⑨ 状压DP.将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数 ...
最新文章
- Eclipse的Ctrl+鼠标左键的智能化链接配置
- Spring容器创建流程(3)对beanFactory设置
- Linux下Zend Framework的“Invalid Controller Specified”问题
- mysql alter atafter_MySQL 常用操作
- Spring 无缝整合 quartz
- C#生成JSON数据格式的函数
- 深入浅出MFC之6大技术 消息映射及命令传递 DECLARE_MESSAGE_MAP 和 ON_NOTIFY ON_COMMAND ON_MESSAGE 三大难点解析
- (转)招商银行这一招,引起了各大银行的注意
- 怎样用计算机才能更快,如何让网速变快,详细教您怎么让电脑网速变快
- kux2mp4(优酷kux转换为mp4软件) v2021
- 大手笔!舒印彪对核电发展表态,华能抢到了核电开发入场券!
- 软件测试方法口诀,自测记忆法
- Python sys模块常见函数
- 除了VR 还有什么能在2016年撬动物联网?
- audio_policy.conf文件:AUDIO_DEVICE_IN_REMOTE_SUBMIX含义
- 1. Java基础语法
- word_state
- linux cups工作原理,Linux打印系统CUPS原理分析
- PPT在线预览 转换为图片实现方案 Apache POI 实现时踩坑:含嵌入文件ppt转换报错 ArrayStoreException
- Python爬取起点小说并保存到本地文件夹和MongoDB数据库中