模拟113 题解
A. ZYB建围墙
手玩发现这个东西好像有一点规律。
考虑在最优的方案下,每增加一个点对答案的贡献$0/1$,然后随便写写就好了。
B. ZYB和售货机
把$x$向$x$能偷的节点建边。
发现这个东西一定会形成森林,
其中一些树为基环树,其余为普通形态的树。
对于普通形态的树,显然可以赚到其中所有能赚的钱。
但基环树对应着不能从环上一个节点偷另一个节点。
维护偷每个点的最小方案和次小方案,然后枚举环上节点就好了。
C. ZYB玩字符串
因为最终插入了一个字符串$p$,字符串$p$一定可以表示为$s$的一个子串。
所以可以枚举$s$的字串。
贪心地直接匹配后删掉的做法是错误的,可以被很简单的数据卡掉。
然后发现这个东西好像有点像括号匹配,然而字符可以多次出现,于是无从下手。
正解用了一个很优秀的$dp$。
设$dp_{l,r}$表示区间$[l,r]$能否被若干个字符串$p$拼凑出来。
如果$|p|$不被$r-l+1$整除,那么还表示最后能否又拼出$p$的一段前缀。
这个$dp$设计的优秀之处在于当区间长度确定,拓展出现的单个字符对应$p$中位置也是确定的。
分两种情况转移:
由一个字符拓展,对应着最后拼出来的一段的一个。
由若干个$p$拓展,这个过程通过记忆化递归处理。