状态:f[i][j][k]表示第i行放了j个皇帝,状态为k的方案。

那么首先预处理出所有可行的方案,以及两两可以相互转移的答案。

b状态转移到a状态就是 :\(f[i][j][a] += f[i - 1][j - count(a)][b]\)

小tips:

判断两行有没有相邻的一可以判断: \((a \,\, \& \,\, b) == 0\),\(a \,\, \& \,\, b\)一定要加括号,判断当两个在前后两行的皇帝是否能斜着攻击到:即\(a | b\)不能有相邻的1

#include <iostream>
#include <vector>
#include <algorithm> using namespace std; typedef long long LL; const int N = 15, M = 110, K = 1 << 10; LL f[N][M][K]; //第i行 放了j个皇帝 状态为k的方案集合
int n, m;
vector<int> legal;
int cnt[K + 10];
vector<int> head[K]; bool check(int num) { //没有相邻
for (int i = 0; i < n; i++) {
if ((num >> i & 1) && ((num >> i + 1) & 1)) return false;
} return true;
} int count(int num) {
int cnt = 0;
while (num) num -= (num & -num), cnt++;
return cnt;
} int main() {
cin >> n >> m;
for (int i = 0; i < 1 << n; i++) {
if (check(i)) {
legal.push_back(i);
cnt[i] = count(i);
}
} for (int i = 0; i < legal.size(); i++) {
for (int j = 0; j < legal.size(); j++) {
int a = legal[j], b = legal[i];
if ((a & b) == 0 && check(a | b))
head[i].push_back(j); //由j可以转移到i
}
} f[0][0][0] = 1;
for (int i = 1; i <= n; i++) { //枚举行
for (int j = 0; j <= m; j++) { //枚举有多少个皇帝
for (int a = 0; a < legal.size(); a++) { //枚举可转移的状态
for (int b = 0; b < head[a].size(); b++) {
int c = cnt[legal[a]];
if (j >= c) f[i][j][a] += f[i - 1][j - c][head[a][b]];
}
}
}
} LL res = 0;
for (int i = 0; i < 1 << 10; i++) res += f[n][m][i]; cout << res << endl;
//cout << f[n + 1][m][0] << endl; return 0;
}

AcWing 1064. 小国王的更多相关文章

  1. AcWing 227. 小部件厂 (高斯消元)打卡

    题目:https://www.acwing.com/problem/content/description/229/ 题意:有很多个零件,每个零件的生产时间都在3-9天之间,现在只知道每个工人的生产部 ...

  2. AcWing 251. 小Z的袜子| 分块+莫队

    传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从 ...

  3. acwing 算法面试、笔试题公开课整理记录

    week1 Google KickStart 2019 A轮 讲解视频地址AcWing 549. 训练   tag: 排序 遍历 在线练习地址AcWing 550. 包裹       在线练习地址Ac ...

  4. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  5. NOIP2012国王游戏

      题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...

  6. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  7. BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)

    传送门 Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个 ...

  8. 【NOIP2012】国王游戏

    这一次高精度完美地过辣好开心OvO,还get到了非常方便的高精度除小于10000的方法,这个是我自己脑出来的OvO 看来下午高精度傻逼得值qvq 原题: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个 ...

  9. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

  10. COJ 0260 HDNOIP201204四个国王

    HDNOIP201204四个国王 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在N*M的棋盘上摆国际象棋中的“国王”.如果两 ...

随机推荐

  1. 如何使用iptables防火墙模拟远程服务超时

    前言 超时,应该是程序员很不爱处理的一种状态.当我们调用某服务.某个中间件.db时,希望对方能快速回复,正确就正常,错误就错误,而不是一直不回复.目前在后端领域来说,如java领域,调用服务时以同步阻 ...

  2. os模块常用操作

    作者:Simon0903 链接:https://www.jianshu.com/u/2b4bc3b5e6fc 來源:简书 os.getcwd() #返回当前工作目录 os.chdir(path) #改 ...

  3. go run 和 go build的区别

    go run:编译并运行程序,但不会产生exe文件,运行速度也相应较慢 go build : 会产生exe文件,运行速度快

  4. AcWing 4797. 移动棋子题解

    算出数值为 \(1\) 的点离 \((3, 3)\) 的距离即可. #include <iostream> #include <cstring> #include <al ...

  5. 《深入理解Java虚拟机》读书笔记:垃圾收集算法

    由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程. 垃圾收集算法概要 1. 标记-清除算法 ...

  6. Kubernetes hostPort 使用

    1.概述 在 Kubernetes 中,hostPort 是一种用于将主机上的特定端口映射到运行在 Pod 内部容器的端口的配置选项.通过使用 hostPort,你可以在主机上暴露容器的服务,从而允许 ...

  7. MIT6.s081/6.828 lectrue5/6:System call entry/exit 以及 Lab4 心得

    这篇博客主要复习 lecture05:GDB calling conentions 和 lecture06:System call entry/exit 的内容,外加 Lab4:traps 的心得 前 ...

  8. Unity UGUI的Slider(滑动条)件组的介绍及使用

    Unity UGUI的Slider(滑动条)件组的介绍及使用 1. 什么是Slider组件? Slider(滑动条)是Unity UGUI中的一种常用UI组件用,于在用户界面中实现滑动选择的功能.通过 ...

  9. 《流畅的python》— 列表推导与生成器表达式

    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 很多Python ...

  10. 【项目源码】基于JavaEE的健康管理系统

    随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台.该网站主要有教师饮食管理. ...