浅谈轮廓线DP
一、算法优势轮廓线 DP 是面向网格、棋盘模型的状压 DP 进阶算法能够解决普通逐行状压 DP 无法覆盖的网格计数问题算法效率远高于朴素 DFS。该算法采用逐格转移的方式计算精度更高仅存储局部轮廓线状态时空复杂度更优是 12 * 12 及以内小规模网格计数问题的最优解法。二、核心解题思路当题目网格中存在上下、左右相邻格子的放置限制、禁止相邻选取等约束条件时可优先使用 轮廓线 DP。本文将结合经典例题 P1879 [USACO06NOV] Corn Fields G 完整讲解算法原理与实现。2.1 状态设计定义记忆化 DP 数组 dp[i][j][s]其中 i,j 为当前遍历的网格坐标下标从 0 开始s 为轮廓线状态压缩值。状态释义s 的第 0 ~ j-1 位记录当前第 i 行已遍历列的格子状态s 的第 j 位及后续位数记录上一行i-1 行对应列的格子状态。数组存储对应位置、对应轮廓线状态下的合法方案总数。为方便理解状态转移逻辑结合网格状态示例进行说明0 列 1 列 2 列 3 列 4 列 5 列 6 列0 行 1 0 1 0 0 0 01 行 1 0 0 1 0 1 1遍历至不同坐标时轮廓线状态sss的取值如下在 i1,j0 时s1010000s1010000s1010000。在 i1,j1 时s1010000s1010000s1010000。在 i1,j2 时s1010000s1010000s1010000。在 i1,j3 时s1000000。在 i1,j4 时s1001000。在 i1,j5 时s1001000。在 i1,j6 时s1001010。在 i1,j7 时s1001011。2.2 完整代码实现为适配书写习惯代码中将题目输入的行列数进行互换最终代码可正常 AC 对应题目全文下标从 0 开始。// 全文使用 based-0#includeusing namespace std;#define mod 100000000int dp[15][15][5000];int k[15][15];int n,m;int set(int s,int i,int v) //设置状态{return v0?s(~(1i)):s|(1i);}int get(int s,int i) //获取状态{return (si)1;}int f(int i,int j,int s) //轮廓线DP{if(in)return 1; //全部dp完了证明此方案有效返回1if(jm)return f(i1,0,s); //下一行if(dp[i][j][s]!-1)return dp[i][j][s]; //记忆化int ans;ansf(i,j1,set(s,j,0))%mod; //不种草一定可以所以直接下一列if(((j0(!get(s,j-1))(!get(s,j)))||(j0(!get(s,j))))k[i][j]) //当且仅当上一行和左边一列状态为0没种菜且这个地方可以种草ans(ansf(i,j1,set(s,j,1)))%mod;return dp[i][j][s]ans; //记忆化}int main(){cinnm; //n和m互换for(int i0;in;i)for(int j0;jm;j)cink[i][j];for(int i0;in;i)for(int j0;jm;j)for(int p0;p(112);p)dp[i][j][p]-1; //标记为未访问coutf(0,0,0);return 0;}看到这里可能你还不太理解所以附上一个友情链接 。三、学习总结熟练掌握本文的状态设计思路与模板代码并独立通过两道配套例题即可掌握轮廓线 DP 的基础用法能够独立解决基础网格限制类计数问题。

相关新闻

MobileNetV2.pytorch架构详解:Inverted Residuals与Linear Bottlenecks核心技术

MobileNetV2.pytorch架构详解:Inverted Residuals与Linear Bottlenecks核心技术

MobileNetV2.pytorch架构详解:Inverted Residuals与Linear Bottlenecks核心技术 【免费下载链接】mobilenetv2.pytorch 72.8% MobileNetV2 1.0 model on ImageNet and a spectrum of pre-trained MobileNetV2 models 项目地址: https://gitcode.com/gh_mirrors/mo…

2026/7/21 21:13:18阅读更多 →
深入解析TI AM335x ROM Code启动流程与SYSBOOT配置实战

深入解析TI AM335x ROM Code启动流程与SYSBOOT配置实战

1. 项目概述与核心价值 在嵌入式系统开发中,尤其是基于TI AM335x这类复杂应用处理器的项目,最让人头疼的往往不是应用逻辑的编写,而是系统“第一脚”怎么踢出去——也就是上电启动。很多工程师都遇到过这样的场景:精心设计的板子焊…

2026/7/21 21:42:55阅读更多 →
BIND9 故障排查手册:解决 DNS 服务器常见问题的 15 种方法

BIND9 故障排查手册:解决 DNS 服务器常见问题的 15 种方法

BIND9 故障排查手册:解决 DNS 服务器常见问题的 15 种方法 【免费下载链接】bind9 Archived mirror of https://gitlab.isc.org/isc-projects/bind9, please submit issues and PR/MRs in the GitLab. 项目地址: https://gitcode.com/gh_mirrors/bi/bind9 BI…

2026/7/20 15:09:22阅读更多 →
2026年家用充电桩怎么选?主流 7kW 产品综合排名与选购指南

2026年家用充电桩怎么选?主流 7kW 产品综合排名与选购指南

新能源汽车保有量稳步提升,家用充电桩怎么选成为不少车主的高频疑问。市面产品配置参差不齐,功能侧重各有不同,普通用户很难快速筛选出适配自身需求的选项。本次测评选取市面四款主流 7kW 家用充电桩产品,以五大核心维度为标准做客…

2026/7/22 6:47:11阅读更多 →
Qt GUI性能优化:从15FPS到60FPS的实战策略

Qt GUI性能优化:从15FPS到60FPS的实战策略

1. 性能优化背景与挑战在Qt GUI开发中,15FPS的卡顿白屏现象是许多开发者遇到的典型性能瓶颈。当界面刷新率低于30FPS时,用户会明显感知到操作延迟和视觉卡顿。而60FPS的流畅体验意味着每帧仅有16.67ms的处理时间窗口,这对UI线程的任务调度提出…

2026/7/22 6:47:11阅读更多 →
Opus 5与Fable 5订阅方案选择:从工作流适配到效率提升

Opus 5与Fable 5订阅方案选择:从工作流适配到效率提升

最近在几个技术社区和开发者社群里,看到不少人在讨论一个看似“非技术”但实际影响深远的选择:面对 Opus 5 和 Fable 5 这两个订阅方案,到底应该怎么选?争论的焦点往往集中在价格、功能列表或者某个特定任务的响应速度上。但作为一…

2026/7/22 6:47:11阅读更多 →
乱账/旧账清理、账务合规整改

乱账/旧账清理、账务合规整改

一、乱账整理前期准备在进行乱账整理工作时,前期准备至关重要,这就如同建造高楼大厦需要打好坚实的地基一样,先确定好边界能有效避免越理越乱。(一)资料收集惠州亚正企业咨询有限公司会协助企业收集各类财务相关资料&a…

2026/7/22 6:47:11阅读更多 →
OpenCV文件结构解析与开发实践指南

OpenCV文件结构解析与开发实践指南

1. OpenCV文件结构深度解析 作为一名长期使用OpenCV进行计算机视觉开发的工程师,我经常需要深入理解其文件组织结构。OpenCV作为开源计算机视觉库,其文件结构设计直接影响着我们日常开发中的模块调用、功能扩展和问题排查效率。今天我就带大家全面拆解Op…

2026/7/22 6:47:11阅读更多 →
被马斯克称为“吓人地聪明”:我用一周实测Grok 3,发现了它真正的杀手锏

被马斯克称为“吓人地聪明”:我用一周实测Grok 3,发现了它真正的杀手锏

适用人群:正在关注2026年AI模型选型的开发者、想了解Grok 3真实实力的技术决策者 你将获得:Grok 3在代码、推理、实时信息三大场景的一手实测数据,以及它跟主流模型的真实差距马斯克说Grok 3“scary smart”。xAI声称它 outperforms anything…

2026/7/22 6:45:11阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →