dp 专题 1

被 dp 打爆了无数次,尝试抢救一下。

大部分题来自 cf 2800+ tag=dp

2022.6.30

CF739E Gosha is hunting

先冲了个 n3 的 dp 没跑过去,嘻嘻。思考了一会发现可以费用流莽掉。

在题解的提醒下想到了 wqs 二分,考虑把 dp 的第三维带上权消掉,并且满足一个单调关系。只需要二分把数量卡进题目范围即可。那就做完了。

CF724E Goods transportation

编了个从小到大硬点的贪心,但是没有考虑到货物可以反复传递,寄了。

最正确的做法显然是直接上网络流,但是你光建图就寄了。

考虑最大流转化成最小割,设 dpi,j 表示前 i 个点,有 j 个点和 S 相邻的边没被割,就做完了。

CF671D Roads in Yusland

dpu,i 表示覆盖了 u 的子树,且有一条链延伸到了 dep=i 的最小代价。

显然 dpu,i=dpv,i。对于路径底的 udpu,deptopval+dpv,depv

你发现这玩意可以线段树启发式合并搞定,就做完了。

CF1372E Omkar and Last Floor

从前往后 dp 假了 /kx。

考虑区间 dp,只考虑左右端点在 l,r 之间的线段。因为是平方,所以硬点一个 k,它们都要在 k 处放个点,剩下的就是 fl,k1+fk+1,r。非常的合理。

CF512D Fox And Travelling

注意到环上的点显然不会删去,所以把所有环扬了,变成一个森林。

这时有两种情况,第一种是与环相连,那操作顺序是定向的,在树上做一个类似背包的 dp 即可。

第二种是这个连通块本身就是一颗树。那么把它的每个节点都看作根,做一次上面的 dp。这时注意到大小为 i 的方案恰好被算了 ni 次,因为不在方案内的点都能统计到这个方案。特别的是大小为 n 的方案,上面的 dp 相当于硬点了最后一个拿的位置,就不用管了。

把所有连通块的答案卷起来就好了。

CF1129D Isolation

这可能是我今天见到的最牛逼的题了。显然 O(n2) 暴力大家都会。瓶颈是计算一个带权的 ui,j,大概是维护 [i,j] 之间出现一次的数的一些信息。

尝试用数据结构搞掉,发现需要支持区间 +/- 某些数,并且对 k 的数带权求和。正常做法是分块+BIT,但是这题因为只需要加减 1,可以直接上桶,块上记个 tag 就可以了。

俺的 ds 技巧怎么退步这么多呢 /qd。

2022.7.1

CF559E Gerald and Path

先离散化一波,左端点从左到右排序,大力设 fi,j 表示考虑了前 i 条线段,最右覆盖在 j 的最大价值。随便转移。

CF1279F New Year and Handle Change

不是,这都能 wqs 二分的吗。wqs 二分是什么勾八东西啊 /fn。

毛估估一下,随着单次费用上升,用的次数会越来越少,然后它就凸了(?)

套板子就完事了。注意二分完之后要在做一遍答案,防止出现神必情况。

CF755G PolandBall and Many Other Balls

毫无 poly 技巧.jpeg。

显然直接推出 dp 式子,发现次数不大,手动解一下特征方程,然后就做完了。

题解区里 Karry5307(卡老师 /se/se/se/se)给出了另外一个做法,考虑合并长为 ab 的两段,推一推式子,搞出 FnF2n 的方法,然后可以倍增做。我大受震撼。

qwaszx 的递推做法根本看不懂,爬了。

CF1648D Serious Business

先特判只经过一个区间的。

对于经过若干个区间的,设最后一个区间是 [l,r],路径一定是现在第一行走,然后走到第二行,然后 rush 到 l1。动态求出到第二行第 i 列的最大价值 fi,这显然总能搞出来。

考虑枚举最后一个区间 [l,r] ,贡献就是 val+fk1sumbk1+sumcn+maxx=lr(sumbxsumcx1),这东西大力线段树 / ST 表维护就行了。

2022.7.2

CF1383E Strange Operation

考虑一个串什么时候是最优匹配,发现一个目标串的 0 在原串里一定是连续的。

大力设 fi,0/1 表示最优匹配到 i ,结尾是 0/1 的方案数。发现不好转移。设 nxti,0/1 表示在第 i 位后面加上 0/1 会匹配到哪个点。发现 nxti,1 就是最近的 1nxti,0 比较复杂,如果它是一段 0 的末尾,就是下一段长度更长的连续 0 的对应位置,否则就是下一个 0

fi,jfnxti,k,k,就做完了。

LOJ507「LibreOJ NOI Round #1」接竹竿]

推推式子,只跟相同颜色的有关。所以每个颜色维护一个最大值就做完了。(乱入)。

2022.7.4

CF536D Tavas in Kansas

发现 n 不大,就搞一个 n×n 的表,每次只会取上面一行或者左边一列。随便转移。

CF1322D Reality Show

毛估估一下,反着打是一样的。有了 NOIP2021T2 的教训,从大往小打要多记个状态,不优。设 fi,S 表示最后一个选的是 i,当前场上二进制集合是 S 的最大收益。反正数据范围小,转移根据 lilj 的大小关系随便搞搞就行了。

CF1063F String Journey

序列翻转,显然长度不会超过 nfi,j 表示第 i 个结尾长度为 j 是否合法,随便转移。

还有一种方法是设 dpi 表示第 i 位结尾最长的合法串。发现 dpi1+1dpi,每次减+判断,看起来显然可以在 SA 上二分搞定。

太困了已经神志不清了。润。

posted @   ZSH_ZSH  阅读(86)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示