本来想的是用一个类似dp的东西维护,但是后面发现可以从低位到高位枚举.

如果数字为1,那么必须用一个最低位1维护,剩下情况数变成 num//2
如果当前为偶数,那么可以用两个1维护,剩下情况变成 (num-2)//2
以及用更大的2维护,剩下的数字变成 num//2

递归+记忆化搜索即可解决.