题意是:求 [l,r] 区间内完美数的个数,完美数的定义:这个数能是所有位数的倍数,比如42,42是4的倍数,也是2的倍数。
考虑数位DP,
LL dfs(int pos,int now,int lc,int limit) 表示pos为,这个数为now,所有位数的LCM为lc,上限为limit。
那么边界的情况就是 now%lc ==0才返回1
注意数据的输入和输出要用long long 和I64d
还有一个问题,根据前面的DFS函数,记忆化DP为dp[20][2520][2520],2520为1-9的LCM,会MLE,但是在第三维的纪录LCM中不会出现2520种,只会出现大概几十种吧,这里我开到100就能过,那么每生成一个新的LCM,离散化,这里用的是use[]数组,写在DFS函数中,就不用单独的预处理了。
还有就是注意细节吧,我把数组开为dp[20][2520][100],错了好几次,2520访问不到,但是没有返回RE,返回了WA,喵了个咪的。
#include
#include
#include
#include
#include
#include
#include
#include
#include