NC20240 [SCOI2005]互不侵犯KING
题目
题目描述
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。
国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。
输入描述
只有一行,包含两个数N,K ( 1 ≤ N ≤ 9, 0 ≤ K ≤ N * N)
输出描述
方案数。
示例1
输入
3 2
输出
16
题解
知识点:状压dp。
状压dp,不过规定要摆 \(k\) 个(这里我用变量 \(t\) 保存),因此要开一个状态表示放了几个。设 \(dp[i][j][k]\) 表示放到第 \(i\) 行,一共放了 \(j\) 个,上一行的状态是 \(k\) 。枚举 \(i,j,k\) 和上一行的上一行状态 \(l\) 。满足 j < num[k] || (k & (k << 1)) == 1 时 \(k\) 不合法,满足 (k & l) || ((k << 1) & l) || ((k >> 1) & l) == 1 时 \(l\) 不合法。有转移方程:
\]
时间复杂度 \(O(nt\cdot 4^n)\)
空间复杂度 \(O(nt\cdot 2^n)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll dp[15][90][1 << 10];
int num[1 << 10];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, t;
cin >> n >> t;
for (int i = 0;i <= (1 << n) - 1;i++) num[i] = __builtin_popcount(i);
dp[0][0][0] = 1;
for (int i = 1;i <= n;i++) {
for (int j = 0;j <= t;j++) {
for (int k = 0;k <= (1 << n) - 1;k++) {
if (j < num[k] || (k & (k << 1))) continue;
for (int l = 0;l <= (1 << n) - 1;l++) {
if ((k & l) || ((k << 1) & l) || ((k >> 1) & l)) continue;
dp[i][j][k] += dp[i - 1][j - num[k]][l];
}
}
}
}
ll ans = 0;
for (int i = 0;i <= (1 << n) - 1;i++) ans += dp[n][t][i];
cout << ans << '\n';
return 0;
}
NC20240 [SCOI2005]互不侵犯KING的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- SCOI2005互不侵犯King
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1499 Solved: 872[Submit][S ...
- 洛谷1377 M国王 (SCOI2005互不侵犯King)
洛谷1377 M国王 (SCOI2005互不侵犯King) 本题地址:http://www.luogu.org/problem/show?pid=1377 题目描述 天天都是n皇后,多么无聊啊.我们来 ...
- 1087: [SCOI2005]互不侵犯King
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4276 Solved: 2471[Submit][ ...
- BZOJ1087 SCOI2005 互不侵犯King 【状压DP】
BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...
- bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...
- 洛谷P1896 [SCOI2005]互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)
[SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- [Bzoj1083][SCOI2005]互不侵犯king(状压dp)
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4595 Solved: 2664[Submit][ ...
- [bzoj1087][scoi2005]互不侵犯king
题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...
随机推荐
- Vue之将前端的筛选结果导出为csv文件
有导入就有导出哈!这里继导入之后记录一下导出的实现过程. 1.按钮部分: <el-button class="filter-item" style="margin- ...
- Prime Time - 介绍
Prime Time是对timing进行分析 Prime Time使用的是STA方法进行分析 工具会有更新,但是核心内容是不变的 Prime Time(intro to STA) 没有PT工具的时候, ...
- 什么是 doris,为什么几乎国内大厂都会使用它
转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南 今天给各位分享一个非常牛的实时分析型数据库Apache Doris,几乎国内的一二线大厂都在使用它做数据分析 ...
- ECharts——快速入门
ECharts快速入门 引入 ECharts <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- [转帖]《Linux性能优化实战》笔记(十七)—— Linux网络基础与性能指标
一. 网络模型 1. OSI 网络模型(七层) 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,OSI 模型把网络互联的框架分为七层,每个层负责不同的功能.其中, 应用层,负责为应 ...
- [转帖]docker build 中的 -f 选项
https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...
- [转帖]Cgroups资源限制
https://cloud.tencent.com/developer/article/2108816?areaSource=105001.13&traceId=QzVtWN5jGl8zeYZ ...
- Redis性能问题诊断以及scan命令耗时分析
Redis性能问题诊断以及scan命令耗时分析 摘要 最近公司有项目反馈卡顿. 卡顿一小时后自己被拉入群聊. 同事已经基本上定位到问题原因. 我这边想使用朴素的性能观点进行一下性能问题的拆解 为了提高 ...
- [转帖]什么是拒绝服务(DoS)攻击?
https://www.cloudflare.com/zh-cn/learning/ddos/glossary/denial-of-service/ 什么是拒绝服务攻击? 拒绝服务(DoS)攻击是一种 ...
- OpenIM Open Source Instant Messaging Project Docker Compose Deployment Guide
The deployment of OpenIM involves multiple components and supports various methods including source ...