1 条题解
-
0
更难游戏:题解
思路
最终保留下来的唯一获胜路径可以写成
路径上的平台不能被改成 。为了不产生第二条获胜路径,两个相邻路径点 之间,所有同样能够跳到 的非路径平台都必须被改成 。直接枚举整条路径仍然是指数级,因此需要记录“此前路径对右侧的影响范围”。
子任务 1:枚举修改集合
当 时,枚举前 个平台是否改为 。对每个集合按编号递推从平台 到各平台的路径数,并把路径数截断为 。若到平台 的路径数恰为 ,用集合大小更新答案。
时间复杂度为 ,空间复杂度为 。
做法
状态设计
设 表示:已经保证从 到 的获胜路径唯一,并且这条路径上 之前最后一个保留平台的最远可达位置为 时,最少改成 的平台数。
考虑唯一路径上 的前驱为 。必须有 ,转移后的右端点为 。此前状态的右端点不能越过 ,否则此前路径会直接绕过 到达更右的平台。因此需要
当我们按 递减枚举前驱时,维护区间 内满足 的平台个数
$$dp[i][j+a_j]\gets\min\left(dp[i][j+a_j],\ \min_{j\le r<i}dp[j][r]+\textit{removed}\right).$$removed。这些平台若不在唯一路径上却能到达 ,就会形成额外到达方式,必须全部改成 。于是转移为初始状态为 ,答案为 。
子任务 2:直接求区间最小值
对每次转移直接扫描 求最小值。共有 次转移,每次扫描 个状态。
时间复杂度为 ,空间复杂度为 ,可通过 。
满分算法:前缀最小值优化
预处理
转移中所需的区间最小值就是 ,可在 时间取得。每完成一行 ,从左到右构造对应的
pref行即可。总时间复杂度为 ,空间复杂度为 。由于所有测试用例的 之和不超过 ,逐个释放数组即可满足限制。
复杂度
枚举算法的时间复杂度为 、空间复杂度为 ;直接扫描区间最小值的动态规划时间复杂度为 、空间复杂度为 ;满分算法时间复杂度为 、空间复杂度为 。
正确性说明
按唯一路径上的平台编号归纳。初始平台 的路径唯一。假设状态已正确描述唯一到达前驱 的最小代价:只允许此前影响区间在 之前,排除了绕过 的获胜路径;再把 中所有能到达 的非路径平台清零,便只剩从 到 的到达方式,因此新状态可行。反之,任意可行的唯一路径在相邻路径点 之间都必须执行这些清零操作,并且此前影响区间不能越过 ,故转移不会漏掉更优方案。归纳到 即得全局最优答案。
- 1
信息
- ID
- 1258
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者