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的棋盘上摆国际象棋中的“国王”.如果两 ...
随机推荐
- VSCode中的快捷键
VS Code中的快捷键 文件和编辑操作 Ctrl+S:保存文件 Ctrl+K S:保存全部文件 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+X:剪切 Ctrl+F:查找 Ctrl+H:替换 C ...
- 第十六届全国大学生 信息安全竞赛创新实践能力赛wp
这是我第一次参加ctf,有许多东西都还不会,感觉有一些题挺有趣的,多积累积累经验吧. crypto Sign_in_passwd 下发了一个叫flag的文件,用记事本打开发现是两行加密,第一行看着像b ...
- 彻底搞懂Vue针对数组和双向绑定(MVVM)的处理方式
欢迎关注我的博客:https://github.com/wangweianger/myblog Vue内部实现了一组观察数组的变异方法,例如:push(),pop(),shift()等. Object ...
- 【技术积累】Vue.js中的CSS过渡【一】
CSS过渡是什么 在Vue中,可以使用<transition>组件来实现CSS过渡效果.CSS过渡是指在元素的状态发生改变时,通过添加或移除CSS类来实现平滑的过渡效果. <tran ...
- 组合查询(left_inner_right)与排序(order by _DESC _ASC)在题目中的应用
1,想要让哪一列放在开头或者结尾,只需要将select中的查询位置放在最开始或者结尾即可: 2,组合查询要注意使用 on 加上组合条件: 3,order by 默认升序(ASC),降序使用:order ...
- vue中添加音频和视频
视频播放功能 1. 安装vue-video-player npm install vue-video-player --save 或 yarn add vue-video-player --save ...
- 算术逻辑单元的实现(ALU)
一.实验目的 掌握Vivado集成开发环境 掌握Verilog语言基本知识. 掌握并理解算术逻辑单元ALU的原理和设计 二.实验预习 1.ALU(算术逻辑单元)的16种运算的编码 三.模块接口设计 A ...
- python flask 提供web的get/post开发
转载请注明出处: 使用python flask框架编写web api中的get与post接口,代码编写与调试示例如下: from flask import Flask, request, jsonif ...
- 小白弄明白了 unix 时间戳的转换问题
小白对于将 unix 时间戳转换为日期时间和使用日期时间转换为 unix 时间戳,在项目中见到过很多,每次使用时不是用现有的方法转换就是网上搜索方法. 小白见过各种转换方式觉得moment库很是方便, ...
- 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动
下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第2篇, 主要总结和记录一个I ...