1240 诸侯安置【洛谷算法习题】
P1240 诸侯安置网页链接1240 诸侯安置题目描述很久以前有一个强大的帝国它的国土成正方形状如图所示。这个国家有若干诸侯。由于这些诸侯都曾立下赫赫战功国王准备给他们每人一块封地正方形中的一格。但是这些诸侯又非常好战当两个诸侯位于同一行或同一列时他们就会开战。如下图为n 3 n3n3时的国土阴影部分表示诸侯所处的位置。前两幅图中的诸侯可以互相攻击第三幅则不可以。国王自然不愿意看到他的诸侯们互相开战致使国家动荡不安。 因此他希望通过合理的安排诸侯所处的位置使他们两两之间都不能攻击。现在给出正方形的边长n nn以及需要封地的诸侯数量k kk要求你求出所有可能的安置方案数。满足n ≤ 100 n\le100n≤100k ≤ 2 n 2 − 2 n 1 k\le2n^2-2n1k≤2n2−2n1由于方案数可能很多你只需要输出方案数除以504 504504的余数即可。输入格式仅一行两个整数n nn和k kk中间用一空格隔开。输出格式一个整数表示方案数除以504 504504的余数。输入输出样例 #1输入 #12 2输出 #14说明/提示注意镜面和旋转的情况属于不同的方案。解题思路解题思路本题是棋盘上互不攻击的放置方案计数问题本质上是“车的放置”问题的变种。国王需要在正方形的国土中为k kk个诸侯分配格子使得任意两个诸侯不在同一行或同一列。由于国土形状特殊菱形直接处理不便需要通过平移变换将其转化为便于动态规划的规则图形。1. 问题等价转化国土是一个旋转了 45° 的正方形可以看作一个菱形。将其按列划分每一列的长度不同。由于“任意两个诸侯不在同一行或同一列”的约束只与行、列的相对关系有关而将整行或整列进行平移并不会改变诸侯之间是否同行或同列因此可以将菱形的每一列向左对齐得到一个列数从左到右不严格递增的阶梯形图形。题目中说明镜面和旋转属于不同方案因此平移操作不会影响方案计数。变换后国土共有2 n − 1 2n-12n−1列。第i ii列的长度记为L[i]对于i 1 … n − 1 i 1 \dots n-1i1…n−1有L[2i-1] L[2i] 2i-1对于最后一列L[2n-1] 2n-1。例如n 3 n3n3时列长度依次为1 , 1 , 3 , 3 , 5 1, 1, 3, 3, 51,1,3,3,5。2. 动态规划设计设dp[i][j]表示在前i ii列中放置j jj个诸侯且互不同行同列的方案数。由于每一列的长度不超过该列的行数且列与列之间行是共享的因此放置时需要考虑当前列有哪些行已被占用。但注意到图形经过平移后每一列都是从第一行开始的连续行例如第i ii列有L[i]行恰好是第1 11行到第L[i]行。因此如果前i − 1 i-1i−1列已经放置了j − 1 j-1j−1个诸侯它们占用了j − 1 j-1j−1个不同的行。第i ii列有L[i]行其中被占用的行数也是j − 1 j-1j−1因为这些行都在前i − 1 i-1i−1列的范围内所以第i ii列可用的行数为L[i] - (j-1)。状态转移不放置第i ii列放0 00个方案数继承自dp[i-1][j]。放置一个第i ii列放1 11个方案数为dp[i-1][j-1] * (L[i] - (j-1))。因为前i − 1 i-1i−1列放了j − 1 j-1j−1个占用了j − 1 j-1j−1行第i ii列还有L[i] - (j-1)个位置可选。转移方程d p [ i ] [ j ] d p [ i − 1 ] [ j ] d p [ i − 1 ] [ j − 1 ] × ( L [ i ] − ( j − 1 ) ) dp[i][j] dp[i-1][j] dp[i-1][j-1] \times (L[i] - (j-1))dp[i][j]dp[i−1][j]dp[i−1][j−1]×(L[i]−(j−1))所有运算对504 504504取模。边界条件dp[i][0] 1放置 0 个的方案数为 1。若k 2 n − 1 k 2n-1k2n−1即超过最大可放置数直接输出0 00。最终答案dp[2n-1][k]。3. 算法实现读入n , k n, kn,k。若k 2 n − 1 k 2n-1k2n−1输出0 00并结束。预处理列长度数组L对于i 1 i 1i1到n − 1 n-1n−1L[2*i-1] L[2*i] 2*i - 1。L[2*n-1] 2*n - 1。初始化 DP 数组dp[2*n][210]dp[i][0] 1。双重循环外层i ii从1 11到2 n − 1 2n-12n−1遍历每一列。内层j jj从1 11到min ⁡ ( i , k ) \min(i, k)min(i,k)遍历放置数量。计算dp[i][j] (dp[i-1][j] dp[i-1][j-1] * (L[i] - j 1)) % 504。输出dp[2*n-1][k]。4. 复杂度分析时间复杂度状态数O ( n × k ) O(n \times k)O(n×k)每个状态O ( 1 ) O(1)O(1)转移总时间复杂度O ( n 2 ) O(n^2)O(n2)。n ≤ 100 n \le 100n≤100运算量约10 4 10^4104非常快。空间复杂度二维 DP 数组dp[210][210]空间O ( n 2 ) O(n^2)O(n2)完全可接受。总结通过将菱形国土平移为阶梯形使得每一列都是从第一行开始的连续行从而消除了列与列之间行位置的复杂对应关系。在此基础上动态规划只需记录“前i ii列放j jj个”的方案数转移时考虑当前列放或不放并乘以当前列中未被占用的行数。该方法巧妙且高效完美解决了本题。代码内容#includebits/stdc.husingnamespacestd;#defineendl\ntypedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll INF1e18;constll M1e610;constll mod1e97;constll P504;ll dp[210][210],L[210];intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n,k;cinnk;if(k2*n-1){cout0;return0;}for(ll i1;in;i)L[2*i-1]L[2*i]2*i-1;L[2*n-1]2*n-1;for(ll i0;i2*n-1;i)dp[i][0]1;for(ll i1;i2*n-1;i){for(ll j1;jL[i];j){dp[i][j]dp[i-1][j]dp[i-1][j-1]*(L[i]-j1);dp[i][j]%P;}}coutdp[2*n-1][k];return0;}

相关新闻

Recursive Language Models 实战:递归处理超长外部文本

Recursive Language Models 实战:递归处理超长外部文本

把二十万行日志、几百份会议纪要或一整套代码仓库塞进大模型,然后问一句“找出所有相互矛盾的变更”,通常会同时撞上三个问题:输入可能超过上下文窗口;即使能够装下,模型也未必能稳定利用位于中段的信息;一…

2026/10/12 5:35:17 阅读更多 →
MyBatis <sql>标签深度解析:从原理到面试

MyBatis <sql>标签深度解析:从原理到面试

1. 先看一段重复到想吐的SQL:这个标签存在的理由后端开发做到三五年,面试桌上大概率会被问起 MyBatis。其他题多少能聊几句,唯独这种"看着很简单"的标签题,最容易暴露你是背过答案还是真在项目里用过。我见过不少候选人…

2026/10/12 5:35:17 阅读更多 →
UE实战进阶:渲染管线定制、资源管理与性能优化全解析

UE实战进阶:渲染管线定制、资源管理与性能优化全解析

1. 从“能跑”到“跑得好”:UE实战到底在解决什么问题很多人学UE(Unreal Engine)的经历都差不多:跟着教程连蓝图、拖材质、摆几个Actor,跑起来看着像那么回事,但一旦项目稍微复杂一点,就开始卡、…

2026/10/12 5:35:17 阅读更多 →

最新新闻

模型后训练笔记1

模型后训练笔记1

摘要本文主要是博主在学习专用模型后训练的笔记。CPT(Continual Pre-Training)简单来说,CPT就是在已经训练好的通用模型基础上,通过新的数据,学习新的知识,尤其是特定目标领域的知识。形式是自监督学习(sel…

2026/10/12 6:21:43 阅读更多 →
构建知识工作插件集:从采集、整理到输出的自动化实践

构建知识工作插件集:从采集、整理到输出的自动化实践

1. 先别急着写代码:知识工作里的重复劳动到底在哪我始终觉得,知识工作者最缺的不是某个具体工具,而是一条能让人“不思考那些不值得思考的事”的路径。白天开会、回消息,晚上才有时间整理白天收藏的文章、补笔记、做摘要&#xff…

2026/10/12 6:21:43 阅读更多 →
AI产品经理就业实战营拆解:从会用AI到能落AI的转化路径

AI产品经理就业实战营拆解:从会用AI到能落AI的转化路径

1. 这个实战营到底在解决什么问题1.1 从“玩具”到“工具”的那道鸿沟我接触过不少想转行做AI产品经理的朋友,发现一个特别普遍的现象:简历上写着“熟练使用ChatGPT、Midjourney”,面试时也能聊几句大模型原理,但一旦问到“你负责…

2026/10/12 6:21:43 阅读更多 →
阿里巴巴代码规约实战:从IDE插件到Maven构建与CI门禁的全链路落地

阿里巴巴代码规约实战:从IDE插件到Maven构建与CI门禁的全链路落地

简介:面向Java开发者的阿里巴巴代码规约资源包,适合个人开发者及团队落地统一编码规范时参考。包内包含华山版与详尽版两本Java开发手册PDF,前者便于日常速查,后者提供更完整的条款解析与示例说明,系统覆盖编程规约、异…

2026/10/12 6:21:43 阅读更多 →
Vibe Coding实操指南:普通人用AI写代码的完整流程

Vibe Coding实操指南:普通人用AI写代码的完整流程

这两年“Vibe Coding”这个词突然火起来了,我身边不少完全不懂编程的朋友,也开始用AI开口“写代码”。我第一次听到这个词的时候也在琢磨,它到底是新概念,还是把旧东西换个说法。后来自己接连做了几个小项目,从零到一跑…

2026/10/12 6:21:43 阅读更多 →
阿里:让大模型在超长任务中高效训练

阿里:让大模型在超长任务中高效训练

📖标题:QwenGyre: An Elastic Reinforcement Learning Framework for Training xLong-Horizon Agents 🌐来源:arXiv, 2609.33848v1 🛎️文章简介 🔸研究问题:当大语言模型智能体执行耗时数小时、交互数百次的“极长周期”(XLong)任务时,如何解决因执行时间差异巨…

2026/10/12 6:20:42 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →