1 条题解
-
0
题解
思路
把一次方案分成若干段连续打卡区间。若最后一次休息在第 天,那么第 天到当前挑战日 连续打卡,要求 ;挑战 被满足当且仅当 。
做法
子任务 1
枚举 天的打卡集合,检查最长连续段和全部挑战,复杂度 。
子任务 2
令
dp[len]表示处理到当前天、末尾连续打卡len天的最大能量。休息时转移到len=0;打卡时从len-1转移并减去 ,再加入当天所有 的奖励。复杂度 。满分算法
在线段树中为可能的最后休息日 维护
$$F(j)=\text{休息到 }j\text{ 时的最优值}+dj+\text{此后已满足的挑战奖励}.$$处理挑战日 前,先插入“第 天休息”的状态。挑战 的左端点为 ,它对所有 的状态贡献 ,因此做一次前缀区间加。当天连续打卡结束的最优值为
只需离散化 、每个 、、 和 ;其余日期没有挑战,休息状态的最优值不发生结构变化。
复杂度
- 子任务 1:;
- 子任务 2:,空间 ;
- 满分算法:,空间 。
易错点
- 挑战生效条件是 ,线段树更新到 。
- 同一天先插入休息状态,再加入当天挑战;休息当天不能获得该挑战。
- 查询只允许 ,否则连续打卡超过 天。
- 答案至少为 ,因为可以一天也不打卡。
信息
- ID
- 1035
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者