7.3 CWOI 考试 T1 T2 T3

T1 a

观察大样例发现 \(n = 1\)\(n = 3\) 时相等,猜测 \(n = 2k + 1\) 的答案均相等且 \(n = 2k\) 的答案均相等。

打个暴力拍,发现是对的,所以答案就是 \(n \bmod 2 = 1\) 时进行一次操作,\(n \bmod 2 = 0\) 时进行两次操作的原数组。

T2 b

原题 ABC176F

分讨 DP。

最优化问题,考虑 DP。为什么不是贪心?因为不知道怎么贪。

我们设 \(dp _ {i,x,y}\) 表示前面剩下的为 \(x\)\(y\),考虑 \(a _ {i},a _ {i + 1},a _ {i + 2}\) 的最大答案。可以滚动数组掉第一维。

我们把前两个数单独拿出来,拿去初始化 \(dp\),然后最后会剩下一个直接特判。

然后考虑转移,分两种情况:加分和不加分。以下,\(p = a _ i,q = a _ {i + 1},r = a _ {i + 2}\)

先说加分:

  • \(p = q = r\):显然直接取这三个,\(dp _ {i,x,y} = dp _ {i - 1,x,y} + 1\)
  • \(p = q \vee q = r \vee p = r\),以下设 \(p = q\):有两种加分情况:\(x,p,q\)\(x,x,r\),第一种枚举 \(y\),然后 \(dp _ {i,p,y} + 1 \to dp _ {i + 1,r,y}\);第二种没什么说的,\(dp _ {i,r,r} + 1 \to dp _ {i + 1,p,p}\)
  • \(p \neq q \neq r\):三个都可以作为删除的,设 \(r\) 是这个,然后 \(dp _ {i,r,r} + 1 \to dp _ {i + 1,p,q}\)

然后是删除的策略:

  • 三个都丢弃:不改变,因为我们用的是滚动数组。
  • 丢弃任意两个:我们可以枚举 \(x,y\) 来更新,但是这是 \(\Omicron(n ^ 2)\) 的,更好的方法是记录 \(x\)的最大的 \(dp\) 值,只转移这个,\(y\) 同理,可以做到 \(\Omicron(n)\)
  • 丢弃任意一个:转移到 \(dp _ {p,q}\),值是整个 \(dp\) 数组的最大值。

我们可以用一个 vector 来记录需要更新的位置与值,只更新需要更新的,这样就可以做到 \(\Omicron(n ^ 2)\)

T3 c

原题 CF407D

抽象 DP + 双指针

发现 \(n \le 400\),所以我们考虑一个 \(\Omicron(n ^ 3)\) 的 DP。

我们设 \(dp _ {l,r,b}\) 表示左边界为 \(l\),右边界为 \(r\),下边界为 \(b\) 的最小的上边界,实现中可以记为上下边界的距离。如果一个 \([l,r]\) 不合法,那要么是 \([l + 1,r]\) 不合法,要么 \([l,r - 1]\) 不合法,要么就是两列合在一起不合法。因此 \(dp _ {l,r,b} = \min \{ dp _ {l + 1,r,b},dp _ {l,r - 1,b},f _ {l,r,b} \}\),后面那个 \(f\) 表示仅考虑 \(l,r\) 两列的 \(b\) 的最小上边界,可以枚举 \(b\) 然后双指针 \(t\) 求出。

posted @ 2025-07-04 08:40  xguagua_233  阅读(3)  评论(0)    收藏  举报