nowcoder A hard problem /// 数位DP
题目大意: 称一个数x的各个数位之和为f(x) 求区间L R之间 有多少个数x%f(x)==0 #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define inc(i,j,k) for(int i=j;i<=k;i++) #define dec(i,j,k) for(int i=j;i>=k;i--) #define gcd(i,j) __gcd(i,j) #define mem(i,j) memset(i,j,sizeof(i)) const int N=2e5+5; int rd, dfn[2][15][50][50]; int fx, tot, a[15]; LL dp[2][15][50][50]; // dp[f][w][s][m] // f为1说明不是上界 此时为第w位数 // 剩下的数位总和为s 此时的数位总和%f(x)为m LL DFS(int f,int w,int s,int m) { if(w==0) return (s==0&&m==0); // 所有位都枚举过了则w=0 // 所有数位总和为fx则s=0 // x%fx==0则m=0 if(dfn[f][w][s][m]==rd) return dp[f][w][s][m]