A. 数字
dp套dp经典题?
考虑枚举一个$x &y$的值,如何检验这个值是否可能被拼出来。
那么简单的想法就是暴力dp,只要表示出与边界的大小关系就可以转移。
那么考虑同一位上dp只有16种不同的状态,给这16种状态的dp值压在一起就可以得到数的数量。
复杂度看起来很高,但是跑不满。
B. 跳蚤
发现值域很小,然后就开始想一些奇怪的东西了。
考虑对于$t$较大的点,如果暴力维护,那么每个点最多跳根号次就无法再造成贡献。
对于较小的点,由于种类不会很多,所以可以对于每个开数据结构暴力维护。
自然的想法是维护线段树或者树状数组,然后发现log在根号外面了,目测会tle(实测没事)。
然后发现较大的修改次数多,查询次数少,所以分块维护,然后调块长可以做到log在根号里面。
然后发现较小的实际上也可以,查询次数多,修改次数少,那么同样可以分块维护。
这样就做到了不带log的复杂度(实测最慢)。
C. 棋盘
一个显然的想法是状压dp,然后发现复杂度死了。
然后考虑用生成函数来优化。
那么只要求出来整个dp数组的生成函数即可,考虑代入点值然后插值出系数求解。
自然的想法就是代入单位根,然后IDFT求出系数。
然后只要求出来点值即可,发现点值的转移式可以用矩阵来优化。
然后就没了。