P1896 [SCOI2005] 互不侵犯小总结

news/2025/10/11 23:50:24/文章来源:https://www.cnblogs.com/zjr20120321/p/19136148

P1896 [SCOI2005] 互不侵犯

P1896 [SCOI2005] 互不侵犯

题目描述

\(N \times N\) 的棋盘里面放 \(K\) 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 \(8\) 个格子。

输入格式

只有一行,包含两个数 \(N,K\)

输出格式

所得的方案数

输入输出样例 #1

输入 #1

3 2

输出 #1

16

说明/提示

数据范围及约定

对于全部数据,\(1 \le N \le 9\)\(0 \le K \le N\times N\)


\(\text{upd 2018.4.25}\):数据有加强。

呃,没什么好说的直接上错误代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int dp[10][82][1<<9];
int num[1<<9];//每个状态的1的个数 
int chse[1<<9];//每一行可选择的状态集合有哪些 
int tot=0;
int add(int s){//s在二进制下的1的个数 int cnt=0;while(s){if(s&1) cnt++;s>>=1;}return cnt;
}
signed main(){cin>>n>>k;for(int i=0;i<(1<<n);i++){num[i]=add(i);if(i&(i<<1)==0&&i&(i>>1)==0){chse[++tot]=i;}}dp[0][0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=k;j++){for(int x=1;x<=tot;x++){int s=chse[x];if(num[s]>j) continue; for(int y=1;y<=tot;y++){int t=chse[y];if(s&(t<<1)==0&&s&(t>>1)==0&&s&t==0){if(j-num[t]>=0){dp[i][j][t]+=dp[i-1][j-num[t]][s];}}} }}}int ans=0;for(int i=1;i<=tot;i++){ans+=dp[n][k][chse[i]];}cout<<ans;return 0;
} 

让我们猜猜错误在哪

错在位运算优先级

image

正确代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int dp[10][82][1<<9];
int num[1<<9];//每个状态的1的个数 
int chse[1<<9];//每一行可选择的状态集合有哪些 
int tot=0;
int add(int s){//s在二进制下的1的个数 int cnt=0;while(s){if(s&1) cnt++;s>>=1;}return cnt;
}
signed main(){cin>>n>>k;for(int i=0;i<(1<<n);i++){num[i]=add(i);if((i&(i<<1))==0&&(i&(i>>1))==0){chse[++tot]=i;}}dp[0][0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=k;j++){for(int x=1;x<=tot;x++){int s=chse[x];if(num[s]>j) continue; for(int y=1;y<=tot;y++){int t=chse[y];if((s&(t<<1))==0&&(s&(t>>1))==0&&(s&t)==0){if(j-num[t]>=0){dp[i][j][t]+=dp[i-1][j-num[t]][s];}}} }}}int ans=0;for(int i=1;i<=tot;i++){ans+=dp[n][k][chse[i]];}cout<<ans;return 0;
} 

关于两个初始化

我认为的初始化
for(int i=0;i<=n;i++){for(int t=0;t<(1<<n);t++){dp[i][0][t]=1;}}
正确的初始化
dp[0][0][0]=1;

那么为什么我的初始化会错呢?

image

在计数dp下,注意答案会被重复计算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国能源部《生成式人工智能参考指南》解读

生成式人工智能(Generative AI, GenAI)的浪潮正以前所未有的速度席卷全球,重塑了从内容创作到科学研究的每一个领域。对于像美国能源部(DOE)这样肩负着国家能源安全、核安全、环境管理及尖端科学研究使命的机构而…

分析InfluxDB中读取时CPU飙升

问题复现 环境influxdb 1.8 单节点,8C 32G 基于docker compose部署,通过grafana + telegraf监控influxdb性能cpu和负载指标docker compose安装参考其他资料模拟查询 通过Python脚本,查询influx数据 import requests…

win10系统访问smb服务时提示密码错误

win10系统下同时按住win+R运行secpol.msc,在本地安全策略页面依次点击“本地策略”—“安全选项”—“网络安全:LAN管理器身份验证级别”,双击后更改为仅发送NTLMV2响应,拒绝LM和NTLM(&),点击确定保存。

《小说课》读书笔记

作者是写小说的。评价的也是经典小说。可以很高效地提升小说素养。作者:毕飞宇 《杀手》 海明威小说特点:简洁。 任何一部作品都有言外之意,所以不必神化冰山理论。 开头对两个杀手的描写参考了电影的视角、思维方式…

鸡哥单人防守爽图7.0通关.

鸡哥单人防守爽图7.0通关.防空塞满, 风暴广陵, 兵, 就这3个够了.最后boss出来买磁能即可.磁能减速, 要塞放风筝即可.救护车至少80个能抗boss

2025-10-11?

?线性回归我啥也不会决定系数 \(R^2\) 有一列 sample,标签 \(y_i\),均值 \(\overline y\) ,我们的预测 \(\hat y_i\) \(R^2 = 1-\dfrac{\sum (y_i - \hat y_i)^2}{\sum (y_i -\overline y)^2}\) 上面表示预测和真实…

高二停课周记(信息学竞赛) Week1

本周本人信息学竞赛大事记: \(2025.10.08\) 信息学竞赛停课正式开始 \(2025.10.09\) 完成信息学竞赛生涯第三场AK 以后打算每周写一写周记,算是竞赛期间的总结反思,也算是一种消遣零碎时间的方式。 章节1:停课通知 说到…

AtCoder Beginner Contest 427 ABCDEF 题目解析

A - ABC -> AC 题意 给定一个长度为奇数且仅由大写字母组成的字符串 \(S\)。 请删除该字符串正中间的字符,再输出该字符串。 代码 void solve() {string s;cin >> s;for(int i = 0; i < s.size(); i++)if…

zju博士资格考试考前复习(微分方程方向)ode 部分

人甚至无法共情四年前的自己(这真是人算的东西吗……资料:21-22 / 23-24 ode课程资料 只整理计算部分,现在已经不会计算了。。。 例题一做就是 40min 起步。。。。。。 1. 线性方程 \[u = fu + g \]通解 \[F(t) = \…

测试一下博客功能

一级标题咱也不知道一级标题能不能用二级标题 这里是二级内容 加粗 三级标题 四级标题 二二二 二二二eee ssss System.out.println("HelloWorld");

AI如何改变芯片设计

本文探讨人工智能如何革新芯片设计流程,包括缺陷检测、数字孪生建模、参数优化等应用。AI通过创建替代模型加速设计过程,降低实验成本,同时面临精度不足和数据整合挑战,未来将实现人机协作的芯片设计新模式。AI如何…

NOIP 2024

时隔一年重新做。 T1 因为之前做过的缘故 大概 15min 贪心秒了。都不能换就跳过,相同也跳过。否则诶个检查 \(s_1,s_2\) 可不可以换成功,成功了就跳过不要再多换一次了。 换的过程考虑从 \(i\) 后面开始一直走,直到…

2025/10/11

A 用时:3h 预期:100pts 实际:100pts 考虑枚举 \(x\) 找到绝对众数为 \(x\) 的区间去扩展,注意到如果 \([l,r]\) 的绝对众数为 \(x\),则里面一定有一段形如 \(x,x\) 或 \(x,y,x\),然后随便做,一开始的实现是一大…

好玩热门的switch游戏推荐【PC+安卓】塞尔达传说:王国之泪|v1.4.2整合版|官方中文| 附switch模拟器

好玩热门的switch游戏推荐【PC+安卓】塞尔达传说:王国之泪|v1.4.2整合版|官方中文| 附switch模拟器【PC+安卓】塞尔达传说:王国之泪|v1.4.2整合版|官方中文|解压可玩 附switch模拟器 【新switch模拟器已经正式支持新版…

十年运维工程师总结

四个字总结我的十年运维生涯,高开低走。 第一家公司,规模不小的游戏公司(现很好)。 第二家公司,规模很小的游戏公司(现已死)。 第三家公司,规模很小的游戏公司(现已死)。 第四家公司,规模很小的直播公司(现…

运动控制教学——5分钟学会Dijkstra与A*搜索算法!(附仿真视频及代码) - 教程

运动控制教学——5分钟学会Dijkstra与A*搜索算法!(附仿真视频及代码) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

ffplay数据结构解析

ffmpeg版本5-1-6 数据结构 FrameQueue typedef struct FrameQueue {Frame queue[FRAME_QUEUE_SIZE];//存储解码后帧数据(视频YUV/RGB、音频PCM、字幕)的预分配内存池int rindex;//指向当前待读取(播放)的帧位置,相…

CNN 发展历程

CNN 发展历程 • LeNet (1998):局部感受野 + 池化,第一次真正提出 CNN • AlexNet (2012):ReLU + Dropout + 数据增强 + GPU,加速深度网络训练 • VGG (2014):33 小卷积堆叠,结构简洁、可扩展 • Inception (201…

FileX和ThreadX精简版

FILEX精简版合并函数级源文件到整个类级源文件原版Filex和Threadx是每个函数一个文件,(我能想到的好处是方便做单元测试,也可能功能安全认证方便点?)这样在windows环境下编译速度会提高一些(编译一个c/cpp文件都…

C 基础教程

C 基础教程C 语言速查与详解目录最小程序与基本语法 基本类型与字面量 变量、常量与作用域 控制流 函数 指针与地址 数组与字符串 结构体、联合与枚举 内存管理 字符与 I/O 宏与预处理器 指针高级用法 错误处理 存储类…