作业介绍
多维 DP
三扔硬币
状态为 ,表示:前 枚硬币,第 枚的状态是 ,第 枚的状态是 的方案数。
根据这个状态,就可以从 这一维度的状态轻松转移,因为 这一维度后面两个维度就分别代表了第 枚和第 枚硬币的情况。
状态转移如下:
$$\begin{cases} f_{i,0,0}=f_{i-1,0,1}\\ f_{i,0,1}=f_{i-1,1,0}+f_{i-1,1,1}\\ f_{i,1,0}=f_{i-1,0,1}+f_{i-1,0,0}\\ f_{i,1,1}=f_{i-1,1,0} \end{cases}$$答案为 ,其实就是 。
其余细节:
- 注意初始化问题,根据状态设计这个状态必须得有至少两枚硬币才能做。
- 因此初始化 ,那么当 特判一下输出即可。
数字三角形
状态设计
为走到点 的最大值
状态转移
走到点 只能由 或 走过来即
其余细节
由于最终并未规定走到最后一行的哪个点,所以对所有可能的位置求 即可
三倍经验
状态设计
为走到点 且目前乘 次数已经用了 次的最大值。
状态转移
首先走到点 必然是由 或 走过来的,其次在点 还可以考虑是否让当前 这个数字乘以 所以一共有 种转移的情况。
$$\begin{aligned} f_{i,j,k}&=\max(f_{i,j,k},f_{i-1,j,k}+a_{i,j})\\ f_{i,j,k}&=\max(f_{i,j,k},f_{i-1,j,k-1}+a_{i,j}\times 3),k\not= 0\\ f_{i,j,k}&=\max(f_{i,j,k},f_{i-1,j-1,k}+a_{i,j})\\ f_{i,j,k}&=\max(f_{i,j,k},f_{i-1,j-1,k-1}+a_{i,j}\times 3),k\not= 0\\ \end{aligned}$$其中前两个转移对应的是从上方走过来,后两个对应从左上方走过来。
其余细节
- 走到第 行以后,也不一定把乘 次数用完,所以要对第 行所有位置的所有状态求
- 初始 都为一个极小值,因为题目数据范围有负数,
- 注意开
long long。由于一行只能选择一个数字,所以 可以和 取 。
方格取数
走 次,然后求取得的数字最大和。可以看成两个人一起出发去走的最大和。
状态设计
为第一个人走到 ,第二个人走到 的数字最大和。
状态转移
转移分 种情况(第一个人由上方或左边过来,第二个人由上或左过来。 种)。且如果走到同一个点,数字只能相加一次。
其余细节
注意两个人走到同一个位置只计算一次答案。
[CSP-J 2022] 上升点列
注意到可以添加 个自由点,因此两个点 之间的曼哈顿距离 是极限。也就是说将来答案一定可以用到这 个点,因此正常求出最长的二维递增子序列的最大长度,给答案加 即可。
- 状态设计:定义 为以 结尾用了 个自由点的最大长度。
- 状态转移:枚举上一个点 ,计算二者之间的距离曼哈顿距离记为 。若满足 则可以转移。由 转移,它们之间用掉 个自由点。
注意排序。
最长公共上升子序列
本题的状态设计融合了公共子序列和上升子序列。
状态设计: 为以 的前 个数, 的前 个数字且以 结尾的最长公共上升子序列的长度。
状态转移
- 此举为不包含 的第 个元素。
- 如果包含 , 首先必须满足 ,那么根据最长上升子序列的转移,我们还要枚举 前面的某个元素,从它转移过来。
- 即
字串距离
和编辑距离非常相似,设计 为 的前 个字符和 的前 个字符相等后的最小值。
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 15
- 开始时间
- 2025-8-19 0:00
- 截止时间
- 2026-8-10 23:59
- 可延期
- 24 小时