杂题总结 Vol.2
杂题总结 Vol.2
DP 问题专辑 1
Status: OPEN
UVA437 The Tower of Babylon
-
性质观察
-
对于两个姿态,他们的比较是严格弱序的
-
一个方块不可能被放置两次
答案最大是
-
-
方案生成
-
方法一:排序之后直接 dp,相当于求出 topo 序然后 dp
-
方法二:其实方法一等价于求最长路,用 bellman-ford 算法求最长路即可,代码好写。
-
-
拓展:最长路
我们经常见到的问题,其实是说,在带权图
现在考虑,如果保证图
这也很容易,因为在没有负权环的情况下,没有必要重复走一个点,如果出现了需要重复走一个点的情况,则必然说明存在负权环,这与题设矛盾。用 Bellman-ford 或是 SPFA 可以解决(需要注意的是 SPFA 并不是会生成重复访问某一个点的路径,它只是避免由于两条岔路结果后面有个负权边这种会导致贪心错误的情况,会用实际上更优的岔路替换另一条)。
那么考虑一个问题,如果去掉
还是给出无解?不行,因为此时即使是负权环,你也得选一边走,是转不起来的。
这个问题是 NP-Hard 的。最长路问题同理。
P10655 [ROI 2017 Day 2] 反物质
这个题把我给绕进去了,本来以为很麻烦,结果探索了半天没找到有什么性质,结果其实没有什么性质,只是 dp。
应该考虑清楚,答案是怎么贡献的,这个很重要
普通的搜索常常在叶子上统计答案,这要求方案的答案对总答案的贡献要容易计算,然而,本题中,若干结果可能来自同一个实验,也可能是不同实验的,互相之间有影响。
对于每一次实验,产生若干结果,那么对于一次实验,最坏情况应该在结果中取一个最终答案最小的,这是不可控的部分。对于可控的,就是每次可以选择做什么实验,这个是可以自己选的,所以要取 max。就好像实验员和反物质博弈,实验员想让最后结果最大,反物质要使得最后结果最小,这个博弈的结果就是答案。
如果这么想了,那么得到转移方程就非常容易,这个优化也比较平凡。
直接开
std::deque
的空间复杂度尚未证明。如果最后被卡掉了,那么这个题目的难度肯定要加大,因为否则就要用单调栈+并查集的离线 RMQ 做法LCA 的 Tarjan 算法是本算法在 +-1 RMQ 上的特例
- UVA-116 (vjudge.net)
要最小化字典序,可以倒着来 dp
P2516 [HAOI2010] 最长公共子序列
考虑设
那么直观的转移策略就是哪边最大值能够转移过来就从哪边转移数量,但是这样会不会重复呢,就比如从
为简化编码,我们还可以考虑当触发这种特殊情况的时候,两边必定都同时转移了,这是因为若
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18418235
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!