题目大意:查找出给定范围内满足题意的数的个数,即不含4且没有62连着在一起出现,
好了,这题太难了,我看了一个晚上也没看懂,为了防止我忘记我先码在这里,有关记忆化搜索和数位dp的问题,
我只有一个很大致的思路,具体的代码也是借鉴了一位大佬的博客,我在文末贴一下他的博客以表感谢
#include<bits/stdc++.h>
using namespace std;
int disit[20];
int dp[15][2];
int dfs(int len,bool sta_6,bool limit)
{
if(!len) return 1;
if(!limit&&dp[len][sta_6]!=-1) return dp[len][sta_6];
int maxn=(limit?disit[len]:9);
int ans=0;
for(int i=0;i<=maxn;i++)
{
if(i==4)
continue;
if(i==2&&sta_6)
continue;
ans+=dfs(len-1,i==6,limit&&i==disit[len]);
}
if(!limit) dp[len][sta_6]=ans;
return ans;
}
int solve(int x)
{
int len=0;
while(x)
{
disit[++len]=x%10;
x/=10;
}
return dfs(len,false,true);
}
int main()
{
int l,r;
memset(dp,-1,sizeof(dp));
while(scanf("%d%d",&l,&r)&&l&&r)
{
printf("%d\n",solve(r)-solve(l-1));
}
return 0;
}