杂题总结 Vol.2

杂题总结 Vol.2

DP 问题专辑 1

Status: OPEN

EZ 表示简单,10分钟内就能想到。
HD 表示中等,能独立想出
IN 表示困难,独立思考能想到 50% 以上
AT 表示非常困难,独立思考只能想出 50% 以下

UVA437 The Tower of Babylon

EZ

  • 性质观察

    1. 对于两个姿态,他们的比较是严格弱序的

    2. 一个方块不可能被放置两次 答案最大是 n30

  • 方案生成

    1. 方法一:排序之后直接 dp,相当于求出 topo 序然后 dp

    2. 方法二:其实方法一等价于求最长路,用 bellman-ford 算法求最长路即可,代码好写。

  • 拓展:最长路

我们经常见到的问题,其实是说,在带权图 G 上,求出 ST 的最短路径(注意,不要求是简单路径),如果有负权环,给出无解。

现在考虑,如果保证图 G 没有负权环,要求最短的一条简单路径呢?

这也很容易,因为在没有负权环的情况下,没有必要重复走一个点,如果出现了需要重复走一个点的情况,则必然说明存在负权环,这与题设矛盾。用 Bellman-ford 或是 SPFA 可以解决(需要注意的是 SPFA 并不是会生成重复访问某一个点的路径,它只是避免由于两条岔路结果后面有个负权边这种会导致贪心错误的情况,会用实际上更优的岔路替换另一条)。

那么考虑一个问题,如果去掉 G 没有负权环的限制呢?

还是给出无解?不行,因为此时即使是负权环,你也得选一边走,是转不起来的。

这个问题是 NP-Hard 的。最长路问题同理。

P10655 [ROI 2017 Day 2] 反物质

HD+

这个题把我给绕进去了,本来以为很麻烦,结果探索了半天没找到有什么性质,结果其实没有什么性质,只是 dp。

应该考虑清楚,答案是怎么贡献的,这个很重要

普通的搜索常常在叶子上统计答案,这要求方案的答案对总答案的贡献要容易计算,然而,本题中,若干结果可能来自同一个实验,也可能是不同实验的,互相之间有影响。

对于每一次实验,产生若干结果,那么对于一次实验,最坏情况应该在结果中取一个最终答案最小的,这是不可控的部分。对于可控的,就是每次可以选择做什么实验,这个是可以自己选的,所以要取 max。就好像实验员和反物质博弈,实验员想让最后结果最大,反物质要使得最后结果最小,这个博弈的结果就是答案。

如果这么想了,那么得到转移方程就非常容易,这个优化也比较平凡。

直接开std::deque 的空间复杂度尚未证明。如果最后被卡掉了,那么这个题目的难度肯定要加大,因为否则就要用单调栈+并查集的离线 RMQ 做法

LCA 的 Tarjan 算法是本算法在 +-1 RMQ 上的特例

P2516 [HAOI2010] 最长公共子序列

HD

考虑设 fi,j,gi,ja 的前 i 个,b 的前 j 个中的最长公共子序列和最长公共子序列数量。

那么直观的转移策略就是哪边最大值能够转移过来就从哪边转移数量,但是这样会不会重复呢,就比如从 (i1,j)(i,j1) 转移,那 (i1,j1) 中的部分会不会重复呢?考虑分类讨论,假设已经从 (i1,j)(i,j1) 转移,如果 ai=bj,则不管从不从 (i1,j1) 转移,fi1,j1 都肯定是严格小于 fi1,j=fi,j1 的,这一部分的不可能被 gi,j1gi1,j 统计;否则若 aibj ,如果同时还满足 fi1,j1=fi1,j=fi,j1=fi,j 则确实会统计重复,此时减掉 gi1,j1 即可。

为简化编码,我们还可以考虑当触发这种特殊情况的时候,两边必定都同时转移了,这是因为若 fi1,j1=fi,jfi1,j1fi,j1,fi1,jfi,jfi,j1=fi1,j=fi1,j1=fi,j

posted @   haozexu  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示