为啥样例三一直过不了啊?
即使没有算 a - 1,也不应该差这么多啊?
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e3 + 5 , mod = 1e9 + 7;
int dp[2005][11] , m , d , num[2005] , top;
int dfs(int n , int x , int y , int tag) {
if(x < 1) return !y;
if(~dp[x][y] && !tag) return dp[x][y];
int h = 0;
for(int i = 0 ; i <= (tag ? num[x] : 9) ; i ++)
if((n - x + 1) & 1 && i != d) {
h = (h + dfs(n , x - 1 , (y * 10 + i) % m , tag && (i == num[x]))) % mod;
} else if(i == d) {
h = (h + dfs(n , x - 1 , (y * 10 + i) % m , tag && (i == num[x]))) % mod;
}
if(!tag) dp[x][y] = h;
return h;
}
int solve(string x) {
int len = x.size();
for(int i = 0 ; i < len ; i ++) num[len - i] = x[i] - '0';
return dfs(len , len , 0 , 1);
}
signed main() {
memset(dp , -1 , sizeof(dp));
string l , r;
cin>>m>>d>>l>>r;
cout<<(solve(r) - solve(l) + mod) % mod<<'\n';
for(int i = 1 ; i <= r.size() + 1 ; i ++) {
for(int j = 0 ; j < 10 ; j ++)
cout<<dp[i][j]<<' ';
cout<<'\n';
}
return 0;
}