LL dfs(int pos,int prev,bool limit){
int i;
if(pos==0) return 1;
if(!limit&&dp[pos][prev]!=-1) return dp[pos][prev];
int up;
LL ans=0;
up = limit?a[pos]:9;
for(i = 0;i <= up;i ++){
if(prev==6&&i==2) continue;
if(i==4) continue;
ans += dfs(pos-1,i,limit&&i==up);
}
if(!limit) dp[pos][prev] = ans;
return ans;
}
LL solve(int n){
len = 0;
while(n!=0){
int x = n%10;
n /= 10;
a[++len] = x;
}
LL ans = dfs(len,0,1);
return ans;
}
不要62(数位dp)
最新推荐文章于 2022-12-02 14:05:13 发布