hdu 2089 不要62
题意:求区间内不包含4和连续62的数的个数
分析:从高位向低位枚举,4的话,直接不枚举就行了,62用一个标志来记录上一个数是否是6,还要加一个表示上面是否达到上限,没有就可以枚举到9,否则枚举到liimt[len]
入门题,这个模型以后会经常用到
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int dp[8][2],d[8]; 5 6 int dfs(int len,int state,int f){ 7 if(!len)return 1; 8 int& tmp=dp[len][state]; 9 if(!f&&tmp!=-1); 10 int maxn=!f?9:d[len-1]; 11 int ret=0; 12 for(int i=0;i<=maxn;i++){ 13 if(i==4||i==2&&state)continue; 14 ret+=dfs(len-1,i==6,f&&i==maxn); 15 } 16 if(!f)tmp=ret; 17 return ret; 18 } 19 20 int solve(int x){ 21 memset(dp,-1,sizeof(dp)); 22 int len=0; 23 while(x>0){ 24 d[len++]=x%10; 25 x/=10; 26 } 27 return dfs(len,0,1); 28 } 29 30 int main(){ 31 int x,y; 32 while(cin>>x>>y&&x+y) 33 cout<<solve(y)-solve(x-1)<<endl; 34 35 36 return 0; 37 }