AcWing 1064. 小国王
状态: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. 小国王的更多相关文章
- AcWing 227. 小部件厂 (高斯消元)打卡
题目:https://www.acwing.com/problem/content/description/229/ 题意:有很多个零件,每个零件的生产时间都在3-9天之间,现在只知道每个工人的生产部 ...
- AcWing 251. 小Z的袜子| 分块+莫队
传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从 ...
- acwing 算法面试、笔试题公开课整理记录
week1 Google KickStart 2019 A轮 讲解视频地址AcWing 549. 训练 tag: 排序 遍历 在线练习地址AcWing 550. 包裹 在线练习地址Ac ...
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...
- NOIP2012国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...
- 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- BZOJ3174 Tjoi2013 拯救小矮人(贪心+DP)
传送门 Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个 ...
- 【NOIP2012】国王游戏
这一次高精度完美地过辣好开心OvO,还get到了非常方便的高精度除小于10000的方法,这个是我自己脑出来的OvO 看来下午高精度傻逼得值qvq 原题: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个 ...
- bzoj 3065: 带插入区间K小值 替罪羊树 && AC300
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1062 Solved: 253[Submit][Status] Des ...
- COJ 0260 HDNOIP201204四个国王
HDNOIP201204四个国王 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在N*M的棋盘上摆国际象棋中的“国王”.如果两 ...
随机推荐
- 如何使用iptables防火墙模拟远程服务超时
前言 超时,应该是程序员很不爱处理的一种状态.当我们调用某服务.某个中间件.db时,希望对方能快速回复,正确就正常,错误就错误,而不是一直不回复.目前在后端领域来说,如java领域,调用服务时以同步阻 ...
- os模块常用操作
作者:Simon0903 链接:https://www.jianshu.com/u/2b4bc3b5e6fc 來源:简书 os.getcwd() #返回当前工作目录 os.chdir(path) #改 ...
- go run 和 go build的区别
go run:编译并运行程序,但不会产生exe文件,运行速度也相应较慢 go build : 会产生exe文件,运行速度快
- AcWing 4797. 移动棋子题解
算出数值为 \(1\) 的点离 \((3, 3)\) 的距离即可. #include <iostream> #include <cstring> #include <al ...
- 《深入理解Java虚拟机》读书笔记:垃圾收集算法
由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程. 垃圾收集算法概要 1. 标记-清除算法 ...
- Kubernetes hostPort 使用
1.概述 在 Kubernetes 中,hostPort 是一种用于将主机上的特定端口映射到运行在 Pod 内部容器的端口的配置选项.通过使用 hostPort,你可以在主机上暴露容器的服务,从而允许 ...
- MIT6.s081/6.828 lectrue5/6:System call entry/exit 以及 Lab4 心得
这篇博客主要复习 lecture05:GDB calling conentions 和 lecture06:System call entry/exit 的内容,外加 Lab4:traps 的心得 前 ...
- Unity UGUI的Slider(滑动条)件组的介绍及使用
Unity UGUI的Slider(滑动条)件组的介绍及使用 1. 什么是Slider组件? Slider(滑动条)是Unity UGUI中的一种常用UI组件用,于在用户界面中实现滑动选择的功能.通过 ...
- 《流畅的python》— 列表推导与生成器表达式
列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 很多Python ...
- 【项目源码】基于JavaEE的健康管理系统
随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台.该网站主要有教师饮食管理. ...