【洛谷P1896】互不侵犯【状压dp】

洛谷P1896-互不侵犯(状压dp) 题意:洛谷P1896 在N×NN×NN×N的棋盘里面放KKK个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共888个格子。(N&lt;=9,K&lt;=N∗N)(N&lt;=9,K&lt;=N*N)(N<=9,K<=N∗N) 分析: 首先暴搜肯定被否定,时间复杂度是指数级的,所以我们就... 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P1896
在 N × N N\times N N×N的棋盘里面放 K K K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上、左下、右上、右下八个方向上附近的各一个格子,共8个格子。


思路:

由于棋盘最大只有 9 × 9 9\times 9 9×9,所以可以考虑使用状压 d p dp dp。
设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示第 i i i行,状态为 j j j,前 i i i行已经放了 k k k个国王的方案数。
显然还需要枚举上一行的状态。为了满足任意两个国王不能斜线、直线上相邻,所以需要判断上一行的状态和这一行的状态是否满足

x&y=0
x&(y<<1)=0
x&(y>>1)=0

其中 x , y x,y x,y分别表示这一行的状态和上一行的状态。
可以先把所有合法的状态(即这一行内没有任何两个国王相邻)预处理出来,顺便初始化 f f f数组和 s s s数组, s s s数组表示这个状态中放置了几个国王。
然后就不用枚举状态,直接枚举合法状态集合的编号。
设 i i i表示第 i i i行, j j j表示这一行的状态是第 j j j个合法状态, k k k表示上一行的状态是第 k k k个合法状态,前 i − 1 i-1 i−1行放了 l l l个王的方案数。
转移方程就是
f [ i ] [ j ] [ l + s [ j ] ] + = f [ i − 1 ] [ k ] [ l ] f[i][j][l+s[j]]+=f[i-1][k][l] f[i][j][l+s[j]]+=f[i−1][k][l]
答案就是 ∑ i = 0 c n t f [ n ] [ i ] [ m ] \sum^{cnt}_{i=0}f[n][i][m] ∑i=0cnt​f[n][i][m]
其中 c n t cnt cnt表示有多少个合法状态。
需要开 l o n g   l o n g long\ long long long。时间复杂度 O ( n m × c n t 2 ) O(nm\times cnt^2) O(nm×cnt2)。


代码:

#include <cstdio>
using namespace std;
typedef long long ll;

const int MAXN=(1<<9);
int n,m,maxn,cnt,q[MAXN],s[MAXN];
ll f[10][MAXN][100],ans;

bool check(int x)  //判断这个状态是否是合法状态
{ 
	bool flag=0;
	while (x)
	{
		if (x&1&&flag) return 0;
		if (x&1) flag=1;
			else flag=0;
		x>>=1;
	}
	return 1;
}

int count(int x)  //这个状态中放置了多少个国王
{
	int sum=0;
	while (x)
	{
		sum+=(x&1);
		x>>=1;
	}
	return sum;
}

bool check_push(int x,int y)  //判断这两行是合法
{
	if (x&y) return 0;
	if (x&(y<<1)) return 0;
	if (x&(y>>1)) return 0;
	return 1;
}

int main()
{
	scanf("%d%d",&n,&m);
	maxn=(1<<n);
	for (int i=0;i<maxn;i++)
		if (check(i))
		{
			q[++cnt]=i;
			s[cnt]=count(i);
			f[1][cnt][s[cnt]]=1;
		}
	for (int i=2;i<=n;i++)
		for (int j=1;j<=cnt;j++)
			for (int k=1;k<=cnt;k++)
				if (check_push(q[j],q[k]))
					for (int l=0;l<=m-s[j];l++)
						f[i][j][l+s[j]]+=f[i-1][k][l];
	for (int i=1;i<=cnt;i++)
		ans+=f[n][i][m];
	printf("%lld",ans);
	return 0;
}
hcaptcha-challenger:基于本地AI模型自动破解验证码的工程实践 验证码作为区分人类与机器的经典安全机制,其核心原理是通过图像识别、行为分析等交互式挑战来阻挡自动化程序。传统绕过方法依赖第三方打码平台或脚本,存在成本高、稳定性差的问题。随着多模态大语言模型和计算机视觉技术的发展,本地化AI求解成为新的技术方向,它通过集成YOLO、ResNet等模型,在本地完成图像语义理解,实现了高隐私、低成本、可进化的验证码自动化解决方案。这种范式尤其适用于需要大规模稳定处理网页交互的场景,如电商数据采集和社交媒体管理。hcaptcha-challenger项目正是这一理念的工程实践,它 阅读详情

相关推荐

Windows事件ID 10010报错:DCOM注册超时与Game Bar修复指南

DCOM(分布式组件对象模型)是Windows中用于跨进程组件通信的核心机制,其注册超时问题常表现为事件ID 10010报错。当Game Bar的PresenceWriter组件因权限配置不当、组件损坏或开机资源竞争而无法在限定时间内向DCOM注册时,系统会记录该错误,并可能伴随DCOM服务主机CPU占用升高或游戏栏功能异常。理解DCOM激活原理与Network Service账户权限,有助于从权限修复、组件重注册及开机时序优化等层面系统排查。本文针对不同Windows版本,提供从静默处理到根治的完整方案,

weixin_33563728的博客 911

状态压缩DP学习总结+经典例题精解

文章目录状压DP学习总结+经典例题精解1、前言2、状态压缩3、使用场景4、常用模板5、经典例题[5.1、 [USACO06NOV]Corn Fields G](https://www.luogu.com.cn/problem/P1879)5.2、吃奶酪[5.3、 [USACO13NOV]No Change G](https://www.luogu.com.cn/problem/P3092)5.4、[SCOI2005]互不侵犯 状压DP学习总结+经典例题精解 1、前言 学了这么久,说真的,动态规划是一个特别

pursuit的博客 1万+

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

poj3254/洛谷P1896 状压dp

http://poj.org/problem?id=3254 https://www.luogu.org/problemnew/show/P1896 把这两题放在一起,解题思路差不多。以POJ的为例 题意:给出n∗mn*mn∗m的010101矩阵, 111表示能放数字,000表示不能放数字,每个数字不能相邻,问方案数。 题解:状压DP模板题。 预处理出每一行的状态,压缩成十进制数。 dp[i][j...

WayJasy的博客 262

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1260

dreamerv3复现教程

由于dreamerv3存在很多版本冲突问题,所以很难直接使用和复现。

无人机飞啊飞啊飞 2835

状压dp(洛谷 P1283 平板涂色)

题目链接 思考了一会,发现是状压dp,注意的是每个矩形(除了最上面的)都有自己的先导状态。我们必须记录。这里我用pre[i]记录。即如果想填色第i块。必须达到的状态。详细记录过程看代码。比较好懂。 //mp[i][j]意思是(i,j)坐标位置,被那个编号的矩形占用了(-1为空) for (int i = 0; i < n; i++) { for (int j ...

平凡人Kalzn的博客 375

SAP CDS View association 的工作原理,与数据库传统 join 操作的区别讲解

笔者前一篇教程,介绍了 SAP CDS View 里如何创建 association:本文就来一一对这些问题进行解答。首先我们来研究如何消费创建好的 SAP CDS View 中的 association 数据。在上图 ABAP Development Tool 里展示的 CDS View 界面,点击 F8 快捷键,进入 Data Preview 即数据预览界面。我们随便选中一条行项目,右键,发现右键菜单里,赫然有一条的菜单项。看来这个功能肯定和 association 相关了。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1008

【洛谷P1896】互不侵犯【状压DP】

状压

ssllyr 238

YOLOv11 改进 - 注意力机制 | LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测

本文介绍了一种用于滑坡检测的模型LS-YOLO及其在YOLOv11中的结合应用。LS-YOLO首先构建多尺度滑坡数据集MSLD,为模型训练提供丰富数据。设计了基于高效通道注意力、平均池化和空间可分离卷积的多尺度特征提取模块MSFE,充分提取滑坡特征信息。在解耦头中采用膨胀卷积增加模型感受野。我们将MSFE模块集成进YOLOv11,替换部分原有模块。实验表明,改进后的YOLOv11在数据集中表现出色 。

魔改工程师的博客 870

13.0 针对跳转不存在Activity崩溃处理,改成弹Toast提示,去掉崩溃弹窗,避免app崩溃退出

在开发过程中,在app跳转到某个没注册的Acitivity时,往往会出现崩溃的场景,这样也不好,接下来就从framework中来拦截这个崩溃,改成toast提示,

安卓兼职framework和app工程师的博客 48

洛谷P1896_状压dp

本弱第一篇状压dp(在看了题解的前提下做的) 在n*n个格子内放m个国王,要求国王的四周即周围8个格子不能再有国王,求不同的放置方案数 将任意一行的一个状态看作是n位的二进制数,1表示放了国王,0表示没有放 dp[i][j][k] 表示前i行第j个状态,已经放置了k个国王的方案数; can[i]第i个状态的数字,num[i]第i个状态的1的个数; #include &amp;amp;amp;lt;cst...

喵 喵 喵~ 461

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

(状压dp)洛谷P1896互不侵犯

洛谷P1896互不侵犯 思路: DP好难,状压DP好难。 状压dp就是把状态压缩成一个数,以节省空间。例如这题,国王在一行中要么放要么不放,那我们令放为1,不放为0,就可以组成一个01串,我们把这01串看成一个二进制数的话,就可以将这个状态表示成一个数。 因为涉及到二进制,所以状态dp中采用很多位运算。 对于题目要求国王四周都不能有其他的国王。 在同一行时,我们可以用((s>>1)&a...

Z7784562的博客 275

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【题解】洛谷 P1896 [SCOI2005] 互不侵犯 [状压 dp]

状态数 dp、状态压缩、位运算

Isaac Regulus的博客 237

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

洛谷P1896 互不侵犯【状压DP】

题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案; #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=(1<<10)+7; ll dp[15][maxn][110]; int num[maxn]; b...

MaJorieL 223

洛谷 P1896 [SCOI2005]互不侵犯(状压dp)

P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 注:数据有加强(2018/4/25) 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入输出样例...

菱形继承 860

洛谷 P1896 [SCOI2005]互不侵犯 (状压dp)

洛谷 P1896 [SCOI2005]互不侵犯 洛谷链接 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入输出样例 输入 #1 3 2 ...

October の 补题记录 394

洛谷 P1896 [SCOI2005] 互不侵犯 题解 状压dp

状压dp入门 洛谷P1896 互不侵犯 C++代码 附详细注释 动态规划

一只摸鱼的bbc 1295

洛谷 P1896 [SCOI2005]互不侵犯 状压dp

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 注:数据有加强(2018/4/25) 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入输出样例 输入 #1复制 3 2 输出...

qq_40620465的博客 235

状压DP概念 及例题(洛谷 P1896 互不侵犯)

状压DP 就是状态压缩DP。所谓状态压缩,就是将一些复杂的状态压缩起来,一般来说是压缩为一个二进制数,用01来表示某一元素的状态。 比如一排灯泡(5个) 我们可以用一串二进制01串来表示他们的状态 11111就是全开 00000就是全关 00001就是只开了第五个 00101就是第三和第五个开了 以此类推.....而这个二进制串是可以用一个十进制数表示的 比如31就是11111 ,1就...

weixin_30772261的博客 158

状压DP入门经典题 洛谷P1896 互不侵犯

题目链接:https://www.luogu.org/problem/P1896 题意:给你一个n*n的棋盘,摆上k个国王,要求每个国王九宫格范围内没有别的国王 分析:状压DP入门经典题 我们可以用二进制数串表示状态比如1010 就是该行第二个第四个有国王,第一三个就没有 判断九宫格范围内是否有别的国王,我们从上到下依次递推 对于当前行,就是i&(i<<1)...

weixin_30304375的博客 210

【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)

洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识点参考: https://blog.youkuaiyun.com/fox64194167/article/details/20692645 思路 看数据识算法系列 我们...

161

洛谷P1896 互不侵犯[SCOI2005]【状压DP】

题目描述 https://www.luogu.org/problemnew/show/P1896 这是一道比较典型的状压DP题,只是这题国王的攻击范围为8个格子,所以判断的时候不光本身要左移判断,本身也要与下一行的左移判断(右移一样),同时这个题也有国王的数目要求,所以转移的数组要加上一个变量,即 ans[i][p][k]表示第i行 状态为p 已经放了k个国王 转移的时候还要注意国王总数不能超过...

ETwinner的博客 200

洛谷 P1896 [SCOI2005]互不侵犯(状压dp)

题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 输入格式 只有一行,包含两个数N,K(1<=N<=9,0<=K<=N∗N)N,K ( 1 <=N <=9, 0 <= K <= N * N)N,K(1<=N<=9,0<=K<=N∗N) 输出格式 所得的方案数 输入输出样例 输入 3 2 输出 16 深度优先搜索70分做法:

IAMLSL的博客 768

洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s],f[i][j][s]就表示在只考虑前i行时,在前i行(包括第i行)有且仅有s个国王,且第i行国王的情况是编号为j的状态时情况的总数。 状态转移方程 f[i][j][[s]=sum(f[i-1][...

swust5120171204的博客 233

洛谷P1896[SCOI2005]互不侵犯(状压DP)

题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 注:数据有加强(2018/4/25) 输入输出格式 输入格式: 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式: 所得的方案数 输入输出样例 输入样例#1: 3 ...

weixin_30477797的博客 103
上一篇: 【NOIP2017】【洛谷P3957】跳房子【单调队列优化dp】
下一篇: 【洛谷P1641】生成字符串【数论,数学】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值