【1 月小记】Part 6: DP 优化 - L

news/2026/1/16 22:07:42/文章来源:https://www.cnblogs.com/L-Coding/p/19494216

DP 优化

持续更新中……

前缀和优化

P2513 [HAOI2009] 逆序对数列

这题不加优化也能过,难崩

考虑这个状态定义是怎么来的。倘若尝试将 \(n\) 排列的具体顺序融入状态定义会发现需要维护一个状压状的维度,数据范围太大,肯定不可做;然后注意到,因为你每次往排列里放的都是一个比原来所有数都要大的数,所以状态决策跟 \(n\) 排列的具体顺序完全无关。于是不妨定义 \(f_{i, j}\) 表示 \(i\) 的排列中,存在 \(j\) 个逆序对的方案总数。

考虑 \(i\) 的排列是 \(i - 1\) 的排列转移而来的情况。因为后加的那个数字比先前的数字都要大,所以原来的前缀和数目 \(p\) 满足以下关系式:

\[\begin{cases} j - p_{\min} = i - 1 \Rightarrow p_{\min} = j - i + 1 \\ p_{\max} = j \end{cases} \]

确定了 p 的范围之后,就有

\[f_{i, j} = \sum_{p = \max(0, j - i + 1)}^{j} f_{i - 1, p} \]

现在的时间复杂度是 \(O(n^2 * k)\) 的,考虑到状态转移的复杂度,我们可以对其进行优化。如何优化?我们可以使用前缀和来加速状态转移。

不妨定义 \(s = \sum_{p = 0}^{j} f_{i - 1, p}\)。因为我们在对 \(f_{i, j}\) 实施转移时,求的总是一段既有区间的和;每次 \(i\) 指针往前移动时,既有区间只会增加 \(f_{i - 1, j}\) 这一个值,因此只需在每次循环中将 \(f_{i - 1, j}\) 累加进 \(s\) 中即可。

注意特判 \(\max(0, j - i + 1) = j - i + 1\)\(j - i + 1 > 0\) 的情况,此时需要将 \(s\) 减去 \(f_{i - 1, j - i + 1}\) 这一部分。

记得取模。

CF383E Vowels

高维前缀和优化 DP,也称作 SOS-DP。

注意到字母种类非常少,我们可以使用状压,把每个字母压到一个二进制位上。

如果直接求交集不太可做,因此考虑正难则反,求补集。

考虑定义 \(f_{st}\) 表示以集合 \(st\) 为元音字母集合的补集时,不合法的单词数目。

一个单词是不合法的,说明所有的元音字母都不包含在里面,进而说明它包含于元音字母集合的补集。

所以我们只需要在元音字母集合的补集上跑高维前缀和枚举子集即可。

单调数据结构优化

P2569 [SCOI2010] 股票交易

对于每支股票,可以选择不动、买入或卖出,有点像一个含有三重决策的背包状问题。

不妨设 \(f_{i, j}\) 表示第 \(i\) 天,手里有 \(j\) 股股票时能赚到的最多的钱。

  1. 不动

    \[\]

    \[ \]

    \[\]

    \[ \]

    \[\]

    \[ \]

由于买卖股票过程中可能会亏钱,即 \(f\) 数组值存在负数,所以最开始一定要赋一个极小值(不是 \(0\))。边界显然是 \(f_{0,0} = 0\)

考虑如何对它进行优化。显然转移 1 无法优化。

注意到转移 2 意味着每一个 \(j\) 指针的前面都挂着一个长度为 \(as_i\) 的窗口。把状态转移方程展开,因为 \(-ap_i \cdot j\) 是个定值,可以挪到 \(\max\) 的外面,所以我们的目标就是要找到这个窗口里最大的 \(f_{i - w - 1, k} + ap_i \cdot k\)。写一个滑动窗口即可。

转移 3 的优化方式和转移 2 基本相同,不过它是 \(j\) 指针的后面挂着长度为 \(bs_i\) 的窗口。这样的话,我们就需要倒序遍历 \(j\) 的值。其他没什么不同。

P6563 [SBCOI2020] 一直在你身旁

img

说点闲话吧。

这题被 yyy 珍爱有加,在 24N2 公众号上曾被当作文章的一部分来投稿。早些时候 yyy 曾与我推荐过这道题,称“会了这道题就掌握了区间 DP 的精髓”。

题目背景源于动漫《Clannad》。那是我前年 12 月份看的一部动漫了,当时给了我很深的印象。记得当时发了高烧,在家请了近两周的假,把两季连着追完了。说到这部动漫,又让我想起她了。果然她给我留下了很多美好的回忆呀。

好了好了,还是回归正题吧。

定义 \(f_{l, r}\) 表示已知电线长度在区间 \([l, r]\) 内时,查明电线长度所需的最小花费。

想要查明区间 \([l, r]\) 的状况,必须在其中间挑选一根电线购买,即

\[f_{l, r} = \min_{k = l}^{r}(\max(f_{l, k}, f_{k + 1, r}) + a_k) \]

断开的两个子区间要取 \(\max\) 的原因在于,我们求的实际上是在最劣的情况下,最少要支出的开销(因为题目中问的是“至少”)。

现在你得到了 20 pts,接下来是优化。因为 \(\min\)\(\max\) 很麻烦,所以考虑把 \(\max\) 分讨掉。进而,需要找到刚好使得 \(f_{l, k} \geq f_{k + 1, r}\)\(k\)

发现若钦定 \(r\),则该分界点 \(k\)\(l\) 不降而不降。进而进一步分析确定分界点后的转移方程。

  1. \(f_{l, r} = \min_{l \leq k < r}(f_{l, k} + a_k)\)
    此时要想使得 \(f_{l, k}\) 取最小,必须发现它单调不减,且 \(a\) 数组也单调不减,进而最小值就是 \(k\) 取区间分界点的情况,两者都是最小的。

  2. \(f_{l, r} = \min_{l \leq k < r}(f_{k + 1, r} + a_k)\)
    可以认为 \(r\) 后面挂着一个长度为 \(r - k + 1\) 的窗口,要求维护最小的 \(f_{k + 1, r} + a_k\)。滑动窗口即可。

这道题我仍然没有理解透,需要回过头再看。是一道好题。

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

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

相关文章

【C语言图形学】用*号绘制完美圆的三种算法详解与实现【AI】

前言 在控制台中使用字符绘制图形是学习计算机图形学和算法设计的绝佳入门方式。今天&#xff0c;我们将深入探讨如何在C语言中使用*号绘制一个完美的圆。这不仅是一个有趣的编程练习&#xff0c;更是理解计算机图形学基础算法的好机会。 一、绘制圆的挑战 在开始之前&#xff…

最新Illustrator AI 2026软件下载与安装教程指南

相信从事设计类专业或工作的小伙伴,应该不会感到陌生。Adobe Illustrator(常常被简称为Ai)是一款功能强大且应用较为广泛的矢量图形设计软件工具,广泛应用于平面设计、插画、品牌标识、网页图形等领域。‌目前,最…

【节点】[DepthFade节点]原理解析与实际应用 - 指南

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

2026精选课题-基于spingboot茶文化推广系统的设计与完成

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

2026国内最新棉麻面料品牌top10推荐!广东广州等地优质棉麻面料企业权威榜单发布,品质与创新双优助力服饰产业升级 - 品牌推荐2026

随着服饰消费市场向天然、舒适、功能性方向深度转型,棉麻面料凭借其环保属性与穿着体验,成为品牌产品创新的核心载体。据中国纺织工业联合会最新行业报告显示,2025年国内棉麻面料市场规模突破800亿元,年复合增长率…

ACP:3.Skills 带来的前端变化:当 UI 不再“一眼 AI 味”

ACP:3.Skills 带来的前端变化:当 UI 不再“一眼 AI 味” 在前两篇中,我们已经通过实战看到了 ACP 在 Agent 层 带来的变化: AI 的行为开始稳定,输出开始符合工程预期。 这一篇,我们继续向下走一层,来看一个更直…

实用指南:滑雪游戏 - Electron for 鸿蒙PC项目实战案例

实用指南:滑雪游戏 - Electron for 鸿蒙PC项目实战案例2026-01-16 21:59 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

FastAPI 学习教程 · 第3部分

路径操作配置、响应模型与状态码&#x1f4a1; 本部分目标&#xff1a;学会自定义 API 响应&#xff08;如隐藏敏感字段&#xff09;、设置 HTTP 状态码、为接口添加描述和分组&#xff0c;让你的 API 更专业、更安全、更易用。一、为什么需要“响应模型”&#xff1f; 在真实项…

最近给 node 项目写 CLI 库的时遇到的两个开发问题

node 环境,项目形式是 monorepo。 工程可以认为是某种开放的引擎(有一个 packages 文件夹装所有的库,以及一个用户的目录) 我的 cli 库需要动态执行用户的一些文件(.ts)。 压根没料到这么麻烦 这个事情看起来很简…

真正的风险在于工作流安全而非模型安全

随着AI副驾驶和智能助手被嵌入到日常工作中&#xff0c;安全团队仍然专注于保护模型本身。但最近的事件表明&#xff0c;更大的风险在别处&#xff1a;围绕这些模型的工作流程。最近发现两个伪装成AI助手的Chrome扩展程序从90多万用户那里窃取了ChatGPT和DeepSeek的聊天数据。另…

本周网络安全威胁通报:AI语音克隆漏洞等多起事件

互联网从未平静过。每周都有新的黑客攻击、诈骗和安全问题在某个地方出现。本周的安全事件显示了攻击者改变策略的速度有多快&#xff0c;小错误如何演变成重大风险&#xff0c;以及相同的老工具如何不断找到新的突破方式。请继续阅读&#xff0c;在下一波攻击到来之前了解最新…

Anaconda+CUDA+PyTorch下载教程

@目录前言工具介绍1.Anaconda2.PyTorch3.CUDA4.整体工作关系图Anaconda安装(推荐)1.概述2.下载安装包3.下载步骤4.修改虚拟环境位置5.删除AnacondaCUDA安装(可选)1.概述2.版本匹配3.确认显卡型号4.获取CUDA安装包5…

设备一离线任务就挂?我在鸿蒙分布式项目中踩过的失败恢复坑

摘要 在鸿蒙系统&#xff08;HarmonyOS / OpenHarmony&#xff09;中&#xff0c;分布式能力已经从“概念阶段”进入了实际落地阶段。 手机、平板、智慧屏、车机、穿戴设备之间的协同已经非常常见&#xff0c;但在真实环境下&#xff0c;一个绕不开的问题是&#xff1a;失败随时…

有关平衡树

本篇将详细介绍FHQ-Treap的核心思想以及代码实现 一&#xff1a;BST BST是二叉搜索树&#xff0c;说白了就是一颗二叉树&#xff0c;它满足这样的性质&#xff1a; 对于任意节点x&#xff0c;它的左子树中的所有值都比x小&#xff0c;右子树中的所有值都比x大 &#xff08;…

关于DAG定向问题的一些补充

DAG 定向是一个经典的集合划分容斥问题,我们想要做到每次删去一个 极大 的出度为零的点集,这个东西没有办法直接做到,所以我们考虑给每个集合分配一个容斥系数去做到,通过各种方式都可以得到 \((-1)^{|S|-1}\) 的容…

51单片机_DS1302

实时时钟芯片 DS1302DS1302时钟 main.c #include <REGX52.H> #include "LCD1602.h" #include "DS1302.h"void main() {LCD_Init();DS1302_Init();LCD_ShowString(1,1," - - ")…

工具Cursor(三)MCP(2)自定义mcp tools集成到cursor中的demo

借助 Cursor 对 MCP Servers 的支持&#xff0c;我们可以灵活定制 MCP 工具&#xff0c;有效提升整体工作效率。一、demo ①——调用系统接口你有没有遇到过&#xff1a;通过postman调用本地接口&#xff0c;需要携带token&#xff0c;这就需要登录到系统中抓取token&#xff1…

Playwright处理验证码的自动化解决方案

验证码&#xff08;CAPTCHA&#xff09;一直是自动化测试中最让人头疼的环节之一。每次碰到那些扭曲的文字、点选图片的挑战&#xff0c;自动化脚本就像撞上了一堵墙。我负责的电商项目最近就卡在了登录自动化这个环节——那个该死的滑动验证码让我们的回归测试屡屡失败。 经过…

20260116紫题训练总结 - Link

A - 算术天才⑨与等差数列 简单题,切了。考虑用线段树维护 \(\max\)、\(\min\)、\(\gcd\) 和每个数字前面最后一个等于祂的数字的位置,判断是简单的。 B - Building Bridges 由于 \(T1\) 写+调了一整场,根本没看题。…

【2026目标检测】高质量模型汇总

目标检测模型选型指南&#xff1a;从高精度慢模型到实用型算法全盘点 在目标检测领域&#xff0c;模型的速度与效果往往难以两全&#xff0c;有一批模型虽运行速度较慢&#xff0c;但凭借出色的检测效果占据一席之地&#xff0c;同时还有各类实用型算法和框架可供选择&#xff…