P1896[SCOI2005]互不侵犯 解题笔记

news/2025/10/19 20:16:00/文章来源:https://www.cnblogs.com/cutefurina/p/19151333

由于答案可能会很大,不难想到使用状压dp解决。

考虑使用二进制来表示:

\[100010_{(2)} = 34_{(10)} \]

这种访问方式比数组寻址更加简单快速,如 \((1 << (k - 1)) \& s\) 可以询问状态 \(s\) 的第 \(k\) 位上是 \(1\) 还是 \(0\)\((j >> k) << k\) 可以把状态 \(j\) 的二进制表示下最右边几位清零,而数组不可以 \(O(1)\) 的时间复杂度清零。

考虑使用 \(f_{i, j, k}\) 表示前 \(i\) 行,第 \(i\) 行状态的二进制表示(十进制下的值)为 \(j\) ,放置了 \(k\) 个国王的方案数,那么状态转移方程:

\(f_{i, j, k} = \sum f_{i - 1, new, k - getlen(j)}\)

其中 \(new\) 表示所枚举的上一行的所有合法状态,\(getlen(j)\) 表示 \(j\) 状态有多少位为 \(1\)

code:

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[20][205][1100], ans, n, K, m, nn, L;
int _get(int x) {int sum = 0;while(x) {if(x & 1) sum ++;x >>= 1;}return sum;
}
bool check(int x, int y) {if(x & y) return 1;if((x << 1) & y) return 1;if((x >> 1) & y) return 1;if((y >> 1) & y) return 1;return 0;
}
signed main() {cin >> n >> K;dp[0][0][0] = 1;nn = (1 << n) - 1;for(int i = 1;i <= n;i ++) {for(int j = 0;j <= K;j ++) {for(int k = 0;k <= nn;k ++) {L = _get(k);if(L > j) continue;if(k & (k >> 1)) continue;for(int l = 0;l <= nn;l ++) {if(check(k, l)) continue;dp[i][j][k] += dp[i - 1][j - L][l];}}}}for(int i = 0;i <= nn;i ++) {ans += dp[n][K][i];} cout << ans;
} 

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

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

相关文章

habse

为什么需要它? 简单来说,HBase是一个建立在Hadoop文件系统(HDFS)之上的、分布式的、可扩展的NoSQL数据库。 它的设计灵感来源于Google的Bigtable论文,旨在提供一个能可靠地存储和处理海量结构化或半结构化数据的解…

P2214 [USACO14MAR] Mooo Moo S 解题笔记

思路: 完全背包问题。 对每个牧场做类似于差分的操作,求出每个牧场自身需要达到多少的音量。然后再对每个牧场需要达到的音量进行完全背包的操作,将答案统计进变量cnt中,最后输出cnt即可。 中途出现的错误:完全背…

P1854 花店橱窗布置 解题笔记

思路: 我们用一个二维数组 \(dp[i][j]\) 来表示第 \(i\) 束花放不放在第 \(j\) 个花瓶中的最大值,此时,我们可以进行以下两个操作:不放,状态可以描述为:\(dp[i][j] = dp[i][j - 1]\)。 放,状态可以描述为:\(dp…

什么是 DAQ

什么是 DAQDAQ = Data Acquisition(数据采集) 它的任务是:把真实世界的物理信号(电压、电流、温度、压力、速度等)采集成计算机可处理的数字信号。在 LabVIEW 里,它通过 DAQ 硬件 + DAQ 驱动 + LabVIEW 程序 三者…

央企程序员AI创业一个月感受 ✨

一位央企程序员的摸鱼故事。6天写出第一版、7天完成商业化、14天尝试全网推广...这次创业之旅中有欢喜、有迷茫,更有对AI时代的深度思考!💭6月份的时候,写了一篇《我的开源十年》得到了很多朋友的支持,很是欣慰。…

微信小程序 在云函数本地调试时,总是提示node modules 未安装,立即安装。解决方法

首先确定本地npm node 已安装 cmd npm -v node -v没安装去安装nodejs cd到云函数目录,执行 npm install --save wx-server-sdk@latest

完整教程:C#开源项目:如何让100个贡献者比1个维护者更高效?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用PySide6/PyQt6实现自定义窗口布局,实现类似FluentWindow效果

使用PySide6/PyQt6实现自定义窗口布局,实现类似FluentWindow效果现在在很多项目中,会比较喜欢FluentWindow效果,这种左侧类似于图标菜单或者树形结构的,右侧是是动态窗体或者组件的展示方式,一般不是多文档布局,…

读书日记1

今天怀着敬畏之心开始阅读这部被誉为"程序员圣经"的经典著作。《代码大全2》的开篇就给我带来了强烈的思想冲击,让我重新审视自己对软件开发的认知。 核心收获与深刻见解: 1.软件构建的核心地位:McConnel…

对拍教程(自用)

写在前面: 没有掌握对拍啊,每次都是上网贺别人的代码,写一份自己用吧。 对拍,是一个比较实用的工具。它能够非常方便地对于两个程序的输出文件进行比较,可以帮助我们实现一些自动化的比较输出结果的问题。 Step1:…

物理AI:智能自动化的下一个前沿

本文探讨了人工智能与物理系统融合的技术趋势,详细介绍了物理AI的能力层级、关键技术架构以及在制造业、医疗等领域的实际应用案例,展现了从基础自动化到完全自主系统的技术演进路径。物理AI:连接数字智能与物理现实…

Write To Spreadsheet labview这是什么

Write To Spreadsheet labview这是什么很好,这个问题问得很具体。你提到的:Write To Spreadsheet(LabVIEW) 是什么?✅ 简单一句话解释:“Write To Spreadsheet File.vi” 是 LabVIEW 里用来把数据写入文本文件(…

2025/10/19

2025/10/19学习算法

tryhackme-预安全-网络基础知识-局域网介绍-05

tryhackme-Pre Security-Pre Security-Network Fundamentals-Intro to LAN 房间地址:https://tryhackme.com/room/introtolan (该房间需要订阅,关于付费问题。咸鱼OSINT tryhackme即可。) 这是网络安全入门的基础模…

从众多知识汲取一星半点也能受益匪浅【day16(2025.10.18)】(加班但只加到四点半)

Q26.整理工作清单时遇到的问题现象:做了纯样式页面,准备整理清单补充功能逻辑时发现,没有一下子找出原本对照的页面在哪 原因:把对照页面的路径写在了其他地方,没有写在清单上方便对照查看寻找 解决:找到对照页面…

(个人思考)游戏技能的实现

游戏技能实现的三种方式: 1.类似UE中GAS的方式,统一为Ability,并且不处理任何数据逻辑。 https://github.com/No78Vino/gameplay-ability-system-for-unity 2.类似双影其境那种, 简单直观,每个Ability都是独立处理…

模拟赛T4 分析

题目概述 随机 \(2n\) 个数,值域为 \([0,m]\),求前 \(n\) 个数比后 \(n\) 个数大的概率(对质数 \(P\) 取模),其中 \(10^8\leq P\leq 10^9\)。 数据范围:\(1\leq n,m,T\leq 2000\)。 分析 好好玩。 显然可以转化为…

UUT = Unit Under Test

UUT = Unit Under Test✅ 正确答案: UUT = Unit Under Test🔍 拆解一下:缩写全称含义U Unit 单元、模块、被测设备(即待测件)UT Under Test “正在被测试的”UUT Unit Under Test 正在被测试的单元 / 待测件🧠…

ubuntu系统中containerd的cni网络配置

containerd创建cni网络1、下载cni工具源码包和网络插件包访问地址:https://github.com/containernetworking/pluginshttps://github.com/containernetworking/cni 下载某一个版本的包mkdir -p /root/cni && c…

十月阅读笔记

“时刻准备”是程序员职业生命周期的核心命题。本章开篇便点明,技术领域的迭代永不停歇,唯有以“学徒心态”持续蓄力,才能在浪潮中站稳脚跟。回顾自己初入编程时,曾因满足于现有知识储备,在新技术框架兴起时陷入被…