模拟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$拓展,这个过程通过记忆化递归处理。

posted @ 2019-11-13 16:23  skyh  阅读(163)  评论(0编辑  收藏  举报