Educational DP Contest
1|0A - Frog 1
问题陈述
有块石头,编号为。每块(),石头的高度为。
有一只青蛙,它最初在石块 上。它会重复下面的动作若干次以到达石块:
- 如果青蛙目前在石块上,则跳到石块或石块上。这里需要付出的代价,其中是要降落的石块。
求青蛙到达石块之前可能产生的最小总成本。
简单的线性dp,为到达的最小的代价,所以转移方程就是
2|0B - Frog 2
问题陈述
有块石头,编号为。每块(),石头的高度为。
有一只青蛙,它最初在石块 上。它会重复下面的动作若干次以到达石块:
- 如果青蛙目前在石块上,请跳到以下其中一个位置:石块。这里会产生的代价,其中是要降落的石头。
求青蛙到达石块之前可能产生的最小总成本。
与上一题不同的是,这次转移的前驱很多,但依旧可以直接转移,复杂度
3|0C - Vacation
问题陈述
有 天。每 ()天,第天有三种活动,只能进行一种活动,每种活动会获得的快乐值,相邻两天的活动不能相同,请求快乐值之和的最大值。
表示前天,且第天进行活动的最大快乐值。只需要 的枚举状态和前驱进行转移即可。
4|0D - Knapsack 1
问题陈述
有 个项目,编号为 。对于每个(),项目的权重为,值为。
太郎决定从件物品中选择一些装进背包里带回家。背包的容量为 ,这意味着所取物品的权重之和最多为 。
求太郎带回家的物品价值的最大可能和。
01背包
5|0E - Knapsack 2
问题陈述
有 个项目,编号为 。对于每个(),项目的权重为,值为。
太郎决定从件物品中选择一些装进背包里带回家。背包的容量为 ,这意味着所取物品的权重之和最多为 。
求太郎带回家的物品价值的最大可能和。
还是 01 背包,但是本题中范围非常大,无法枚举。这也用到了一个常用的优化思路,考虑,所以可以背包求出价值为的最小代价,然后找到合法的最大值即可。
6|0F - LCS
问题陈述
给你字符串 和 。请找出一个最长的字符串,它同时是 和 的子串。
典题求 LCS 并还原。
7|0G - Longest Path
问题陈述
有一个有向图,它有个顶点和条边。顶点编号为 ,对于每个 (),条有向边从顶点 到 。不包含有向循环。
求中最长有向路径的长度。这里,有向路径的长度就是其中边的数量。
因为不存在有向环,所以最长的路径起点一定入度为 0终点一定出度为 0。想到这个结论后,比较容易想的就是在拓扑序上线性递推即可。
8|0H - Grid 1
问题陈述
有一个网格,横向有 行,纵向有 列。让 表示从上往下第 行和从左往上第 列的正方形。
对于每个和(,),方格由一个字符来描述。如果 是
.
,则方格 是一个空方格;如果 是#
,则方格 是一个墙方格。可以保证方格和是空方格。太郎会从方格开始,通过反复向右或向下移动到相邻的空方格,到达。
求太郎从到的路径数。由于答案可能非常大,请求取的模数。
简单的二维转移
9|0I - Coins
问题陈述
设 是一个正奇数。
有 枚硬币,编号为 。对于每个 (),当抛掷硬币 时,正面出现的概率为 ,反面出现的概率为 。
太郎抛出了所有的 枚硬币。求正面比反面多的概率。
简单的概率 dp,设表示前个硬币个正面的个数,转移如下:
显然可以通过倒序枚举优化掉一维空间。
答案就是
10|0J - Sushi
问题陈述
有道菜,编号为。最初,每个(),盘都有()个寿司。() 块寿司。
太郎会重复执行以下操作,直到所有寿司都被吃掉:
- 掷一个骰子,骰子上显示的数字的概率相等,结果为。如果骰子上有几块寿司,就吃掉其中一块;如果没有,就什么都不吃。
求在所有寿司都被吃掉之前进行该操作的预期次数。
可以注意到的是选择哪个盘子无所谓,答案与盘子的顺序无关,只与盘子中剩下寿司数量有关。
可以设状态为表示当前有个盘子剩1 个,个盘子剩 2 两个,个盘子剩三个的期望操作次数。
则有的概率选择剩 1 个的盘子,的概率选到剩 2 个的盘子,的概率选到剩 3 个的盘子,的概率选到剩 0 个的盘子。
所以转移方程为
可以看到出现在了方程两侧,所以可以把方程移项得到
根据这个方程便可以进行转移,但枚举比较复杂,所以可以使用深搜加记忆化实现代码
11|0K - Stones
问题陈述
有一个由 个正整数组成的集合 。太郎和二郎将进行下面的对弈。
最初,我们有一堆由 个石子组成的棋子。从太郎开始,两位棋手交替进行以下操作:
- 在中选择一个元素,然后从棋子堆中移走正好个棋子。
当棋手无法下棋时,他就输了。假设两位棋手都以最佳状态下棋,请确定获胜者。
如果当前没有石子,则为先手必败态。所有能够一步到达先手必败的状态均为先手必胜态,无论如何都到达不了先手必败态的状态就是先手必败态。
12|0L - Deque
问题陈述
太郎和二郎将进行以下对弈。
最初,他们得到一个序列 。在 变为空之前,两位棋手从太郎开始交替执行以下操作:
- 移除 开头或结尾的元素。棋手获得分,其中为移除的元素。
假设和分别是太郎和二郎在游戏结束时的总得分。太郎试图最大化,而二郎试图最小化。
假设两位棋手的下法都是最优的,请找出的结果值。
设表示区间中的最大值且最后一次操作是太郎,表示区间中的最大值二郎,所以转移如下:
然后发现两个方程的转移是完全一样的,且最终得到的结果也是一样的,所以可以省略掉第三位。
13|0M - Candies
问题陈述
有个孩子,编号为。
他们决定分享颗糖果。在这里,每个(),个孩子必须分到到颗糖果(包括和)。另外,糖果不能剩下。
求他们分享糖果的方法数,模数为 。在这里,如果有一个孩子得到的糖果数量不同,那么这两种方法就是不同的。
前缀和优化。
首先表示前个人共分得个糖果的方案数。下一个套路就是枚举第个人分到的多少糖果,但是这样做复杂度太高了,转移如下
如果我们维护出了的前缀和,这就可以省掉一维的枚举。
14|0N - Slimes
问题陈述
有 个黏液排成一排。最初,左边的 个黏液的大小是 。
太郎正试图将所有的黏液组合成一个更大的黏液。他会反复执行下面的操作,直到只有一个粘液为止:
- 选择两个相邻的粘液,将它们组合成一个新的粘液。新黏液的大小为 ,其中 和 是合并前黏液的大小。这里需要花费 。在组合粘泥时,粘泥的位置关系不会改变。
求可能产生的最小总成本。
区间dp模板。
表示区间把合并的最小代价。
我们枚举出然后枚举出分界点,然后可以转移
所以我们枚举区间的时候必须要从小到大。
15|0O - Matching
问题陈述
有 名男性和 名女性,编号均为 。
对于每个 ( ),男人 和女人 的相容性都是一个整数 。如果是 ,则男人 和女人 相容;如果是 ,则不相容。
太郎试图做出 对,每对都由一个相容的男人和一个相容的女人组成。在这里,每个男人和每个女人必须正好属于一对。
求太郎能凑成 对的方式数,模为 。
简单的状压 dp,设状态为表示前个男生,匹配女生状态的方案数,其中是一个二进制数每一位 01 表示一位女生是否完成匹配。每次只要枚举状态,然后再枚举当前男生和哪一位女生匹配即可计算出前驱状态。
16|0P - Independent Set
问题陈述
有一棵树,树上有 个顶点,编号为 。对于每个 ( ), -th 边连接顶点 和 。
太郎决定将每个顶点涂成白色或黑色。这里不允许将相邻的两个顶点都涂成黑色。
求 模中可以涂抹顶点的方法的个数。
树形 dp,表示好的白或黑的方案数,然后我们可以枚举子节点,要知道白色的子节点黑白任意,黑色的子节点只有黑色。
17|0Q - Flowers
问题陈述
有 朵花排成一排。对于每一朵 ( ),从左边起第 朵花的高和美分别是 和 。这里, 都是不同的。
太郎正在拔掉一些花朵,以便满足以下条件:
- 剩余花朵的高度从左到右单调递增。
求剩余花朵的美之和的最大值。
发现高度的值域其实很小,所以可以设状态为表示前朵花,且最大高度不超过的美之和最大值。则有转移如下
然后很容易就可以压缩掉一维,然后转移就变成求前缀最大值。求前缀最大值可以用树状数组实现。
18|0R - Walk
问题陈述
有一个简单的有向图 ,其顶点为 ,编号为 。
对于每个 和 ( ),你都会得到一个整数 ,表示顶点 到 之间是否有一条有向边。如果是 ,则存在一条从顶点 到 的有向边,如果是 ,则没有。
求在 中长度为 的不同有向路径的数目,模数为 。我们还将计算多次穿越同一条边的路径。
我们设表示长度为且从到的路径的方案数,则输入的矩阵就是。然后我们根据传递闭包得到转移如下
很容易发现这个转移过程就是矩阵乘法
所以可以用矩阵快速幂来解决这个问题。
19|0S - Digit Sum
问题陈述
求在 和 (含)之间满足以下条件的整数个数,模为 :
- 十进制数位之和是 的倍数。
表示前位和模为的数的个数。
然后我们设,其中表示前是否完全与原数相同。如果相同则当前位的取值是否则是。然后枚举当前位更新状态即可。
注意如果前位不与原数完全相同是,要用记忆化。
20|0T - Permutation
问题陈述
设 是一个正整数。给你一个长度为 的字符串 ,由
<
和>
组成。求满足以下条件的 的 排列的个数,模数为 :
- 对于每个 ( ),如果 中的 -th 字符是
<
,则为 ;如果 中的 -th 字符是>
,则为 。
设状态为表示的排列,且最后一位是的方案数。
如果符号是,则
如果符号是,则
这样如果维护了一个前最后就可以的进行转移了。
21|0U - Grouping
问题陈述
有 只兔子,编号为 。
对于每只 ( ),兔子 和 的兼容性用整数 来描述。这里, 表示每个 ( ), 表示每个 和 ( )。
太郎要把 只兔子分成若干组。在这里,每只兔子必须正好属于一组。分组后,对于每只 和 ( ),如果兔子 和 属于同一组,太郎就能获得 分。
求太郎可能得到的最高总分。
设表示当前选择选择的兔子集合为的最高总分,获得总分只有两种情况,一种是所有的兔子在一组中。还有一种是由至少两个组拼起来的。
对于只有一组的情况,直接统计一下就好,对于多个组拼起来的则使用枚举的子集的方式来求。
22|0V - Subtree
问题陈述
给一棵树,对每一个节点染成黑色或白色。
对于每一个节点,求强制把这个节点染成黑色的情况下,所有的黑色节点组成一个联通块的染色方案数,答案对 取模。
换根 dp。
首先可以任意选择一个点做根节点,我代码里面选择的是,选定根节点后,树就变成了一颗有根树。
现在对于每个点,如果知道了子树中的合法方案数和非子树节点的合法方案数,则答案就是
考虑求,我们可以枚举的子节点,则有如下转移
然后考虑如何求,我们已知了的父亲节点和兄弟节点,则有如下转移
其中如果要求解的话复杂度是的,这里因为要取模,所以采用了前缀积和后缀积的方法,表示前面兄弟结点的前缀积,表示后面兄弟节点的后缀积,则
23|0W - Intervals
问题陈述
给定 条规则形如 ,对于一个 01 串,其分数的定义是:对于第 条规则,若该串在 中至少有一个 1,则该串的分数增加 。
你需要求出长度为 的 01 串中的最大分数。
,。
线段树优化 dp。
设表示前个位置,且最后一个的位置为的最大分数。并且我们强制规定,对于我们只考虑的贡献。显然这里有一个合法条件一定是,所以有如下的转移
为什么有这样的转移呢?首先如果则前位的最后一个也一定是,如果则前面的最后一位是可以任意取的。
然后我们发现对于第一维只和上一位有关,所以可以优化掉一维空间。
然后我们发现转移可以分为两部分。
第一部分是。
第二部分是对于所有满足的,都有。
对于这两部分操作,实际上就是区间最值查询和区间修改,可以使用线段树来实现。
24|0X - Tower
问题陈述
有 块,编号为 。对于每个 ( ),积木块 的重量为 ,坚固度为 ,价值为 。
太郎决定从 块中选择一些,按照一定的顺序垂直堆叠起来,建造一座塔。在这里,塔必须满足以下条件:
- 对于塔中的每个积木块 ,堆叠在其上方的积木块的权重之和不大于 。
求塔中所包含的图块的最大可能权重之和。
这道题算是贪心优化 dp。
首先考虑什么样的更适合放在下面?如果比更适合放在下面,则也就可以化简得到。这样可以进行一个排序,从小到大排序。
然后我们考虑从上往下放表示当前累计重量为的最大价值。现在如果枚举到了物品则有如下转移
其中,这样就可以转化成经典的 01 背包问题,记得使用倒序枚举。
25|0Y - Grid 2
问题陈述
给一个 的网格,每一步只能向右或向下走,给出 个坐标 ,这些坐标对应的位置不能经过,求从左上角 走到右下角 的方案数,答案对 取模。
首先从一个点到到的路径数有中。
记从到不经过任何障碍物的路径数,则有如下转移
其中是比更靠近起点的点。看起来是容斥掉了一个点,让实际上因为我们记录的是不经过任何障碍物的路径,所以容斥的时候是不会重复容斥的。
26|0Z - Frog 3
问题陈述
有 块石头,编号为 。每块 ( )石头 ),石头 的高度为 。这里, 成立。
有一只青蛙,它最初位于石块 上。它会重复下面的动作若干次以到达石块 :
- 如果青蛙目前在 号石块上,请跳到以下其中一块:石块 。这里需要花费 ,其中 是要落脚的石头。
求青蛙到达石块 之前可能产生的最小总成本。
斜率优化 dp。
设表示从到的最小花费,这可以写出最基础的状态转移为
内部可以展开为
把无关项提出来,可以得到
令,则有
至此,关于式子的化简就结束了,现在对于转移,如果有两个点,若满足且更优,则有
移项得
发现这个式子和斜率很像,所以令。
下面就开始时斜率优化的部分,有三个点,如果是最优的则有
对于下图
发现,因此一定不是最优的,所以可以优化成
最后你会发现,实际上就是维护一个凸包
然后,因为本题的时保证递增的,所以最优解只会出现在队首
__EOF__

本文链接:https://www.cnblogs.com/PHarr/p/18107442.html
关于博主:前OIer,SMUer
版权声明:CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律