有点感动..竟然当场独立做出了数位DP..感觉假期这个或许可以练得起来?
看到要直接统计各数的变换次数绝对是不现实的..可是如果手动先变换一次的话就变成1000以内了,这样就可以在统计变换次数的基础上+1就可以了..
那么剩下的就是把符合题目的次数的数给挑出来了,其实很明显变换次数和1的个数有关,所以有必要把1个数的相同的归类,所以并没有什么特别正式的转移方程,处理1个数统计
对各位数扫一遍,如果是0就留给下一位,如果是1,那么先令它为0,后面的数就可以随便取了,枚举1的个数加上前面的1,配合预处理的变换次数看是不是能等于k,能的话加上对应的方案数,方案数其实就是组合数(在几个数位里面去若干一个1),最后在判断这个数本身是否符合要求即可..
当然组合数是可以预处理出来的..用杨辉三角就可以...当时智障想了半天(砸
另外k==0的情况需要预判,上面都默认变换了至少一次的..
然而还是fft了...原因是1只变换了0次,而在算的时候已经是当作做过一次变换处理,所以k==1的时候需要把这个1减掉
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include&l