数位 dp
考虑比较难以记录某个状态下的最大值,可以直接枚举一个数 $d$ 计算强制它为最大值的方案和。
设 $c$ 为 $d$ 在某个长度为 $n$ 的数中的出现次数,要求满足 $c\geq \lceil\frac{n}{2}\rceil$。
设 $c’$ 为 $d$ 以外数码的出现次数,即需要满足 $c-c’\geq 0$。
所以设 $dp_{i,j}$ 表示前 $i$ 个数位,$c-c’=j$ 的方案数,再按照数位 dp 的套路记录上下界啥的就可以转移了。
但是很遗憾,算重了。
需要容斥掉那些存在两个数码都恰好占一半的情况。
同样是枚举这两个数,然后发现这一次合法的数中只包含这两个字符,所以可以记录 $g_{i,j}$ 表示考虑到前 $i$ 位,其中一个数码填了 $j$ 次的方案数,同样套路转移即可。
代码:
1 | #include<cstdio> |

