洛谷 P1896 [SCOI2005]互不侵犯 递推/动归 (可状态压缩)

题解:洛谷 P1896 [SCOI2005] 互不侵犯 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共。#提高+# #状压DP#本文分享的必刷题目是从。只有一行,包含两个数。 阅读详情

洛谷 P1896 [SCOI2005]互不侵犯

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

输入格式
只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

输出格式
所得的方案数

递推/动态规划
只考虑一行,一行合法状态必须保证每个国王至少间隔1,用按位与判断,用二进制记录合法的行状态,共valid_line_king_cnt个。
定义f[N][valid_line_king_cnt][K]
f[i][j][k]表示第i行、行状态id为j的情况、[0,i]行一共放了k个国王的情况下有几种方案
最后把最后一行且一共K个国王的方案数相加。

#include<iostream>
#include<fstream>
#include<iomanip>
#include<algorithm>
#include<vector>
using namespace std;

int calc_king_cnt(int _line_state)
{
	int king_cnt = 0;
	while (_line_state!=0)
	{
		int tmp = _line_state % 2;
		king_cnt += tmp;
		_line_state = _line_state / 2;
	}
	return king_cnt;
}

int main()
{
	int N,K;
	//ifstream infile;
	//infile.open("oj_data.txt", ios::in);
	//if (!infile)
	//	cerr << "ifstream error" << endl;
	//infile >> N>>K;
	cin >> N >> K;
	
	int max_line_state = (1 << N) - 1;
	int valid_line_state_cnt = 0;
	vector<int> valid_line_state_vec;
	for (int line_state = 0; line_state <= max_line_state; ++line_state)
	{
		if ((line_state&(line_state << 1)) == 0)
		{
			valid_line_state_vec.push_back(line_state);
			++valid_line_state_cnt;
		}
	}
	vector<int> valid_line_king_cnt_vec;
	for (int i = 0; i < valid_line_state_cnt; ++i)
	{
		int valid_line_state = valid_line_state_vec[i];
		int king_cnt = calc_king_cnt(valid_line_state);
		valid_line_king_cnt_vec.push_back(king_cnt);
	}

	// f[line_id][line_state_id][king_num]
	long long ***f = new long long**[N];
	for (int line_id=0;line_id<N;++line_id)
	{
		f[line_id] = new long long*[valid_line_state_cnt];
		for (int line_state_id = 0; line_state_id < valid_line_state_cnt; ++line_state_id)
		{
			f[line_id][line_state_id] = new long long[K+1];
		}
	}
	// first line
	for(int line_id=0;line_id<N;++line_id)
		for(int line_state_id=0;line_state_id<valid_line_state_cnt;++line_state_id)
			for (int king_num = 0; king_num < K+1; ++king_num)
			{
				f[line_id][line_state_id][king_num] = 0;
			}
	for (int i=0;i<valid_line_state_cnt;++i)
	{
		int line_king_cnt = valid_line_king_cnt_vec[i];
		f[0][i][line_king_cnt] = 1;
	}

	// other lines
	for (int line_id = 1; line_id < N; ++line_id)
	{
		for (int line_state_id = 0; line_state_id < valid_line_state_cnt; ++line_state_id)
		{
			int line_state = valid_line_state_vec[line_state_id];
			int line_state_king_cnt = valid_line_king_cnt_vec[line_state_id];
			int attack_state = line_state | (line_state << 1) | (line_state >> 1);
			for (int upper_line_state_id = 0; upper_line_state_id < valid_line_state_cnt; ++upper_line_state_id)
			{
				int upper_line_state = valid_line_state_vec[upper_line_state_id];
				if ((attack_state&upper_line_state) == 0)
				{
					// two lines are valid
					for (int king_num = line_state_king_cnt; king_num <= K; ++king_num)
						f[line_id][line_state_id][king_num] += f[line_id - 1][upper_line_state_id][king_num - line_state_king_cnt];
				}
			}
		}
	}

	long long case_num = 0;
	for (int line_state_id = 0; line_state_id < valid_line_state_cnt; ++line_state_id)
	{
		case_num += f[N - 1][line_state_id][K];
	}
	cout << case_num;


	return 0;
}

注意long long,否则有的测试点超出int范围
进一步可以状态压缩,只存储当前行和前一行的状态

基于Dify构建银行智能客服:从意图识别到多RAG架构的实战解析 本文深入解析了如何利用Dify平台构建银行智能客服系统。从传统客服痛点出发,详细阐述了基于意图识别精准分类用户需求,并通过多RAG架构解决知识混淆问题,实现高效、准确的业务响应。文章重点介绍了结合工具调用实现业务流程自动化,并强调了数据本地化部署、内容安全过滤等银行级安全合规实践,为金融行业AI应用提供了实战指南。 阅读详情

相关推荐

3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset Download dataset KITTI 3D Object Detection Evaluation 2017 link 下载四个部分,共41.4GB 解压后为四部分内容(相机校准矩阵calib、RGB图像image_2、标签label_2、点云数据velodyne) 对应的testing和training数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。 Data Preprocess

“知识最大的敌人不是无知,而是错觉” 7150

洛谷 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

HBuilderX远程开发环境配置:Windows SSH连接实操

详细介绍如何在Windows系统中通过SSH连接远程服务器,配置HBuilderX进行高效远程开发,提升编码协作效率。全程实操演示,轻松掌握hbuilderx与远程环境的无缝对接。

weixin_35751194的博客 1191

互不侵犯【状压DP】

题目描述: Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。 Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) Output 方案数。 Sample Input 3 2 Sample Output ...

weixin_45619734的博客 348

单细胞双胞过滤-scrublet安装

pip install scrublet ----use-pep517有如下报错,分析可知安装annoy时不会自动更新gcc的版本,centos默认是4.8.5。pip install scrublet ----use-pep517 仍然报错,但似乎不影响使用,提示Successfully installed。打开终端,进入Python环境,输入以下代码,查看Python安装位置。暂时还没尝试是否存在问题,如果存在问题,降级scrublet版本。包的开发依赖的是比较低版本的numpy,会用到。

hzau_t的博客 792

HMC5883L磁力计驱动开发:I²C通信、校准与FreeRTOS集成

磁力计是惯性导航与电子罗盘系统的核心传感器,其输出原始磁场数据需经精确采集、单位换算与误差补偿才能用于姿态解算。基于各向异性磁阻(AMR)原理的三轴磁力计,如HMC5883L,依赖稳定I²C通信获取12位有符号磁场采样值,并通过增益配置、硬软铁校准及温度补偿提升物理量精度。在嵌入式实时系统中,驱动层须保障数据的时间一致性与抗干扰鲁棒性,避免总线挂死、字节错位或量程误配等典型问题。本文围绕HMC5883L这一广泛使用的停产但仍在产线服役的磁传感器,详解寄存器配置、定点单位转换、八方位校准算法及FreeRTOS

weixin_42594427的博客 145

bzoj1087

例题三、互不侵犯(四川省选2005) 题目大意:     在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 输入文件:        只有一行,包含两个数N,K ( 1 输出文件:       方案数。 Sample Input 3 2 Sample Output 16

lpf_as_a_oier的博客 675

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限,烦请指出~IPM变换(逆透视变换),顾名思义,即将正常透视效应消除的变换,变换结果为鸟瞰图BEV(俯视图);AVM环视拼接一般是将车身前后左右的四个鱼眼相机拼接成环视图(也是俯视),其使用的单应矩阵将四个相机转到同一个俯视坐标系。

mxdsdo09的博客 4171

动态规划-状态压缩DP

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。注:数据有加强(2018/4/25)

重生之我是cxk的博客 759

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 511

如何搭建pikachu靶场

Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字)

2401_85351702的博客 1276

互不侵犯(状压dp)

再来跟大家分享一道状压dp的问题,在这道问题中我们能学到一些处理限制条件的位运算的技巧。 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 注:数据有加强(2018/4/25) 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入输出样例 输入 #1 3 2 输出 #1

AC__dream的博客 390

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)

详细步骤1 数据集的制作1.1 数据标注1.2 生成数据集2 环境的搭建2.1 搭建流程2.2 注意事项(报错)3 开始训练4 可视化4.1 修改webcam.py文件4.2 进行可视化5 参考文章 1 数据集的制作 1.1 数据标注 使用 labelme=4.5.6 版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里 1.2 生成数据集 先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py

G果的博客 8001

P1896 [SCOI2005] 互不侵犯 题解

P1896 [SCOI2005] 互不侵犯 题解

MEGA_V的博客 924

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

本文提出了一种基于状态压缩动态规划的解法,用于解决N×N棋盘放置K个互不攻击的国王问题。针对n≤9的小规模棋盘,采用二进制状态表示每行棋子分布,预处理所有合法单行状态。通过位运算判断相邻行间的合法性,设计三维DP数组dp[i][s][j]表示处理到第i行、状态为s、已放置j个国王的方案数。转移时枚举当前行和上一行的合法状态组合,利用位运算快速验证条件。最终累加所有合法终态得到答案。时间复杂度与状态数相关,在n=9时仍高效可行。代码实现中需要注意使用long long类型防止溢出。

Little_Zyl的博客 706

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

P1896 [SCOI2005] 互不侵犯-提高+/省选-

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

weixin_37253733的博客 700

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

洛谷 P1896 [SCOI2005] 互不侵犯,acwing 1064. 小国王

在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。

wwjjjww的博客 272

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

状态压缩

niiick 284

构建动态更新的洛谷算法题单:从原理到实践的路径规划

在算法学习与竞赛准备中,系统化的刷题路径至关重要。其核心原理在于通过结构化的题目序列,帮助学习者循序渐进地掌握算法概念、数据结构和解题技巧。传统的静态题单面临时效性不足的挑战,难以跟上快速演变的算法竞赛趋势和题目库更新。为此,引入动态更新机制能显著提升学习路径的技术价值,它能够持续集成最新的比赛高频考点和社区热议题目,确保训练内容与当前实战紧密接轨。这种机制通常依赖自动化脚本进行数据抓取与多维度评估,并结合社区反馈进行优化,最终服务于算法知识体系的构建与薄弱环节的针对性强化。应用场景广泛覆盖从巩固语法的初学

weixin_33866037的博客 295

状压dp详解,棋盘式、集合型,轮廓线

状压dp问题

EQUINOX1的博客 2870

[C++]洛谷 互不侵犯 状态压缩dp算法详解

互不侵犯:状压dp详解,简单易懂!

weixin_62712365的博客 1392

洛谷oj---P1896 [SCOI2005] 互不侵犯

题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入输出样例 输入 3 2 输出 16 思路: 看到n<=9,可以想到不是搜索就是状态压缩, 设置状态压缩定义,如:当状态序列为1010时(二进制),表示第1,3格子放了国王,第2,4格子没放国王;

雪岩的博客 1038

[贪心算法] 国王游戏

而Ci+1得到的钱变成了a0*a1*...*ai-1*ai+1/bi+1,Ci得到的钱变成了a0*a1*.....*ai-1*ai+1*ai/bi,可以发现Ci+1得到的钱变少了而Ci得到的钱和原来相比变多了,这个时候,只需让a0*a1*.....*ai-1*ai+1*ai/bi

StudyingPanda的博客 1556

【SCOI2005】互不侵犯

【SCOI2005】互不侵犯 【题目描述】 司令部的将军们打算在N × M的网格地图上部署他们的炮兵部队。一个N × M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部

OI技术宅 793

[NOIP2012 提高组] 国王游戏(贪心,排序,高精度)

无他,唯贪心耳

CH_canghan的博客 755

互不侵犯(状态压缩dp)

题目描述 链接 在 N×NN×NN×N 的棋盘里面放 KKK 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 888 个格子。 输入格式 只有一行,包含两个数 N,KN,KN,K。 输出格式 所得的方案数。 Input 3 2 Output 16 数据范围与提示 1≤N≤9,0≤K≤N×N1≤N≤9,0≤K≤N×N1≤N≤9,0≤K≤N×N 思路 f[i][j][k]f[i][j][k]f[i][j][k] 表示在棋盘的前 iii

m0_51864047的博客 264
上一篇: leetcode 1371. Find the Longest Substring Containing Vowels in Even Counts
下一篇: Vim简单操作 命令模式 输入模式 保存 翻页 光标移动
Ljosalfar
博客等级 码龄9年 0粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值