思维题配套题解

配套题单:CodeForces 思维题目

CF79D Password

你有 \(n\) 个灯泡,一开始都未点亮。

同时你有 \(l\) 个长度,分别为 \(a_1 \sim a_l\)

每次你可以选择一段连续的子序列,且长度为某个 \(a_i\),并将这些灯泡的明灭状态取反。

求最少的操作次数,使得最后有且仅有 \(k\) 个位置是亮的,这些位置已经给定,为 \(x_1 \sim x_k\)

Hint
  • 考虑逆向思维
  • 考虑差分
  • 考虑状压

题解:

  1. 逆向思维:把一个序列化为 \(0\)
  2. 差分数列:把区间求改化为 \(O(1)\)

现在题目是,桌子上有 \(k\) 个石子,每次可以把位于 \(x\) 的石子移到 \(x+l_i\),如果 \(x+l_i\) 有石头,那么两个石头抵消。问操作最少次数。

因为要把石子消掉,现在开始匹配,比如样例

下标 1 2 3 4 5 6 7 8 9 10
差分 1 0 0 1 1 0 0 0 0 1

现在我们可以选 \((1,4),(5,10)\)

因为 \(k \le 10\),所以差分数组里最最最多也就 \(20\)\(1\)

直接算出 \(i-j\) 配对所用的最少次数。之后在用 \(dp[i]\) 算出已经抵消了 \(i\)\(2\) 进制下的所有位的最小代价。

posted @ 2024-11-01 16:04  qmwneb946  阅读(7)  评论(0编辑  收藏  举报