有两个端点比较难受,所以考虑转化问题,找到最小的 m 使得存在一个起点 t∈[0,m] 使得每一步 +ai 或 p−ai 后值都在 [0,m] 范围内。
显然 m 是有单调性的,所以考虑二分 m 的值,判定是否合法容易简单想到 O(nm) 暴力背包 dp。此时总时间复杂度为 O(nVlogV),其中 V=i=1∑nai=O(n2),即总时间复杂度为 O(n3logn)。
考虑优化。容易发现 dp 转移的形式就是对一个 01 序列整体左移整体右移然后再按位与把序列框在 [0,m] 范围内。因此容易想到用 bitset 简单优化做到 O(ωn3logn) 求解。
但是这个时候还是过不去。考虑进一步优化,注意到答案的上界不会超过 2maxai。证明的话考虑若一个数大于 maxai 那么下一个直接减 ai 一定不会使得上界超过 2maxai。把二分的上界改设为 2maxai 可以做到总时间复杂度 O(ωn2logn) 可以通过该题。
喜欢的话,留下你的评论吧~