P16600 [SYSUCPC 2025] Perfect Life 题解
有点 /bb 啊。
设
这东西具体怎么实现呢?因为
定义
:即当前位置不被覆盖,有 。 :因为当前位置是 的开头,所以可以覆盖之前的 ,有 。把 DP 值的或和处理出来,令 ,那么有 。 :除了 的情况,还有可能上个位置被之后的 覆盖了,因此 。
把
,临时令 ,即 (说人话就是 dp[i][j] |= (dp[i - 1][j'] ^ (dp[i - 1][j'] & 1)) << 1)。- 若
,那么 ,即 。 - 若
,那么 ,即 。 - 若
,那么 ,即 。
上面的 DP 只用做到
- 左侧的最后一次操作与右侧的最后一次操作是同一个操作,即
。 - 左侧先于右侧操作,那么右侧的最后一次操作不能影响左侧,即
。 - 右侧先于左侧操作,那么左侧的最后一次操作不能影响右侧,即
。 - 注意上面的情况都钦定了有操作影响
或 ,因此还要特判一下 的情况。
做完了,时间复杂度
1 | void trans(int i, int j, int k) { |
- Title: P16600 [SYSUCPC 2025] Perfect Life 题解
- Author: Getaway_Car
- Created at : 2026-05-23 22:00:00
- Updated at : 2026-05-25 19:37:28
- Link: https://getawaycar1024.github.io/article/P16600-SYSUCPC-2025-Perfect-Life-题解/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments