int dfs(int cur, int x, bool f, bool g) {
if(cur == len + 1) return 1;
if(x != -1 && memo[cur][x][f][g] != -1) return memo[cur][x][f][g];
int lim = 9, ret = 0;
if(f) lim = s[cur] - '0';
for (int i = 0; i < lim; ++i) {
if(g) {
if(!i) ret += dfs(cur + 1, -1, f & (i == lim), 1);
else ret += dfs(cur + 1, i, f & (i == lim), 0);
}
else if(abs(i - x) >= 2) ret += dfs(cur + 1, i, f & (i == lim), 0);
}
return memo[cur][x][f][g] = ret;
}
当我填的是前导 0 的时候,x = -1,那我一开始判 memo[cur][x][f][g] 的时候为啥不会因为 x = -1 而 RE 啊/yiw