一篇很好的博客,按照这篇博客进行入门数位dp总结 之 从入门到模板,把写的例题记录一下。
不要62
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[20];
int dp[20][2];
int dfs(int pos,int pre,int state,bool limit){
if(pos==-1) return 1;
if(!limit&&dp[pos][state]!=-1) return dp[pos][state];
int upper = limit?a[pos]:9;
int res = 0;
for(int i=0;i<=upper;i++){
if(i==4||(pre==6&&i==2)) continue;
res += dfs(pos-1,i,i==6,limit&&i==a[pos]);
}
if(!limit) dp[pos][state] = res;
return res;
}
int solve(int x){
int pos = 0;
while(x){
a[pos++] = x%10,x/=10;
}
return dfs(pos-1,-1,0,true);
}
int main(){
while(scanf("%d %d",&m,&n)&&(m||n)){
memset(dp,-1,sizeof(dp));
printf("%d\n",solve(n)-solve(m-1));
}
return 0;
}