1 条题解
-
0
核心思路
本题要求找出最长的加油站序列,使得任意连续 个加油站中不出现重复的网络编号。这是一个典型的带约束的最长子序列问题。
关键观察
- 状态表示:由于 ,可以用一个长度为 的向量来表示最近选择的 个加油站网络编号序列
- 状态转移:对于每个新加油站,检查是否能加入到当前序列中而不违反约束
重要公式与算法
状态定义
设 表示以序列 (长度为 )结尾的合法序列的最大长度,其中 记录了最近 次加油的网络编号。
约束条件
对于新加油站 ,可以加入到以 结尾的序列中当且仅当:
这保证了加入 后,新的连续 个加油站(即 中的所有元素加上 )中没有重复网络。
状态转移
当 可以加入时:
其中 是通过删除 的第一个元素并在末尾添加 得到的新序列。
优化策略
- 空间优化:使用哈希表存储状态,避免存储所有可能的状态
- 剪枝优化:定期清理不可能达到最优解的状态
- 如果某个状态的值与当前最大值相差超过 ,可以删除
- 只保留与当前活跃网络相关的状态
算法复杂度
- 状态数: 但实际远小于此上界
- 时间复杂度:,在约束下可行
- 1
信息
- ID
- 4168
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者