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 }
View Code

 

posted @ 2016-08-06 11:07  N维解析几何  阅读(154)  评论(0编辑  收藏  举报