8.21 教练终于换掉了她的盗版电脑
复制粘贴 3
支持三种操作,三种操作如下:
- 在末尾添加一个字符
- 将当前字符串剪贴到剪贴板中
- 将当前剪贴板粘贴到字符串末尾
三种操作有对应代价,
tag:动态规划,字符串匹配
如果你像我一样想线性 dp,那估计是想不出来的。
由于剪贴板只有一个,这实际上可以视为分层操作,层的不同取决于剪贴板的内容。
层与层之间靠添加操作连接,于是想到用区间 dp,连接区间即为添加操作。
传统的区间 是 的,但是可以发现一个贪心:如果一次剪切粘贴更优,我们会尝试把所有可以再次粘贴的地方粘贴完。于是状态数就降至 了。
所以说,见到有关合并的操作,要往区间 dp 上想。
团队竞技
每个人有智力,力量,幸运三个属性,现需要组成一个三人小队,三个人分别要求智力严格高于其他两人,力量严格高于其他两人,幸运严格高于其他两人。问在此要求基础上,三人中智力最高值,力量最高值,幸运最高值之和。
tag:贪心,基础数据结构
简单题。考虑如果有一个人,在两个方面都是最高值,那么这个人肯定不能选,得删掉。那么在剩下的人里贪心分别选择智力最高,力量最高,幸运最高的人即可。实现上可以用三个 set
。
洒水器
给你一棵树,点有权值,还有一个开始会输入的整数 ,支持以下两种操作
- 单点查询
- 给你一个点 ,对于所有距离 不超过 的点,将权值 。
特殊限制:
tag:面向数据编程
鉴定为点分树。然后发现 ,于是发现了更简单的做法。
建立数组 表示距离 距离为 的儿子需要乘几,我们对于 ,暴力往上跳,每次将 与 全部 ,往上跳时将 变为 。
查询时类似。由于将 也更新了,所以所有奇偶点都会被更新。不重不漏。
Tourism
将 个点在保证每段长度不大于 的限制下分成最少的串 。定义一种分段方式的权值为分出各段最大值之和,求满足上面要求的分段方式的最大的权值。
tag:动态规划及其优化
第一次碰到这种优化状态设计的题,有点棘手,但是第二次就不会这样了。
容易想到简单动态规划:设 为当前到 ,且已经分了 段。那么容易转移。但是这是 的。
枚举方式已经很优了,我们尝试优化状态设计。发现只有 会对之后产生贡献。原因如下:
- 若 ,则 ,必定有一段大于 。
- 若 ,则 ,之后必有一段大于 。
那么我们新设状态 , 能从 转移当且仅当 。转移方程式为:
这是一个经典的单调栈加数据结构转最值为加减的技巧,我们线段树维护 的最值,每一次增加 从单调栈中一层一层调出需要更新的区间,用区间加更新即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!