杂题笔记

  • XSY5208 odekeke

先考虑 \(c=0\) 怎么做。

直接 DP 非常困难,发现一个球放 A 还是 B 的决策与放圆洞还是方洞的决策互相独立,可以求出两种决策的方案数再乘起来。\(f_i\) 表示 A 总重量为 \(i\) 的方案数,\(g_i\) 表示方洞总重量为 \(i\) 的方案数,做 01 背包。合法的方案判一下各个限制即可。

\(c=1\) 显然是考虑删掉一个数后的背包,对于每个数算一下删掉后的答案即可。

  • XSY5206 bracket

容易发现,答案与这个括号串的构成无关,我们只需考虑一个区间内是否构成合法串即可。

\([l,r]\) 合法当且仅当以下三个条件成立:

  • \(r-l+1\) 为偶数。

  • 当所有 ? 均填上 ( 时,没有多余的 )

  • 当所有 ? 均填上 ) 时,没有多余的 (

必要性显然,充分性证明可以先将串中所有 () 左侧的括号成对删掉,这显然不影响判断。可以构成一个形如 )?)??))?(((??? 的串,若中间部分长度为奇数,则两边至少有一个括号无法匹配(因为整个串是偶数,两边匹配后也应为偶数),否则按如上的条件判断,若符合则左右两边都必定可以构造。

发现对于同一个 \(l\),合法的 \(r\) 是以 \(l\) 开始的一段连续区间,对于同一个 \(r\),合法的 \(l\) 是以 \(r\) 结束的一段连续区间,于是可以直接 dp。\(R_i\) 表示当 \(l=i\) 时满足条件 \(2\) 的最大的 \(r\)\(L_i\) 表示当 \(r=i\) 时满足条件 \(3\) 的最小的合法的 \(l\)\(f_i\) 表示考虑前 \(i\) 个字符的答案,有转移 \(f_i=\max(f_{i-1},\max\limits_{R_j\ge i,L_i\le j} f_{j-1}+a[i-(j-1)]+b)\),线段树维护 \(\max (f_{j}-aj)\) 即可。

  • XSY 5218 perm

考虑每次操作本质是什么,发现对于 \((i,p_i)\),操作 \(1\) 后变为 \((i \operatorname{xor} 2^{n-1},p_i)\),操作 \(2\) 后是变为 \((rev(i),p_i)\),其中 \(rev(i)\) 表示 \(i\) 循环移位后的结果。

于是枚举循环移位多少次,之后可达的序列就是对下标异或上任意一个数后的结果。现在要最小化下标异或上一个数的逆序对数,发现第 \(i\) 位异或 \(1\) 即交换相邻的长度为 \(2^i\) 的区间,这个过程可以归并排序时求出,且下层交换不会影响上层,对每一层交换或不交换的情况取 \(\min\) 再求和即可。

posted @ 2024-02-27 20:33  Terac  阅读(25)  评论(0)    收藏  举报