Java教程

多校联训 DP 专题

本文主要是介绍多校联训 DP 专题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【UR #20】跳蚤电话

将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可。

点击查看代码

【UR #12】密码锁

【UR #17】滑稽树上滑稽果

显然,无论在什么情况下,最优解都是一条链,而且每个点的滑稽度不小于所有点的 \(\text{and}\) 之和,因此可以设 \(dp[s]\) 表示拉出一条链,使得链的最下面一个点的滑稽度为 \(s\) 的最小代价,暴力枚举转移是 \(O(n\times a)\) 的,实际上转移时只需要枚举子集,判断是否有点的权值与 \(S\) 与 \(T\) 的差集无交即可,时间复杂度 \(O(3^{\log a})\)

点击查看代码

【UNR #2】梦中的题面

CF1342F Make It Ascending

CF1239E Turtle

可以发现最优摆放方式一定是最小值和次小值一个放左上角一个放右下角,上面升序排列,下面倒序排列。最优行走路线要么将上面一行走完,要么将下面一行走完。

背包算出将最小值和次小值去除后的所有可能,取最优结果即可。

点击查看代码

CF1403C Chess Rush

CF613E Puzzle Lover

将路径拆成三个部分,两边哈希,中间 \(dp\) ,需要特判长度为 \(1\) 和 \(2\) 的部分。

这篇关于多校联训 DP 专题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!