HDU 2089 不要62

不要62

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 11823    Accepted Submission(s): 3686

Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 不吉利的数字为所有含有4或62的号码。例如: 62315 73418 88914 都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。 你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
 
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
 
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
 
Sample Input
1 100 0 0
 
Sample Output
80
 
相比于HDOJ 3555而言稍为复杂的数位DP,筛掉含有62或4的数字
 
[C]
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int num[10];
 5 long dp[10][6];  //0表示什么都没有,1表示含有4,2表示首位含有6,3表示含有62,4表示既含有4又含有62,5表示已经有4且首位为6
 6 long a,b;
 7 
 8 long dfs(int pos,int flag,int limit)
 9 {
10     int end,i,have;
11     long sum=0;
12     if(pos==-1)
13         return flag!=0&&flag!=2;
14     if((!limit)&&dp[pos][flag]!=-1)
15         return dp[pos][flag];
16     end=limit?num[pos]:9;
17     for(i=0;i<=end;i++)
18     {
19         have=flag;
20         if(have==5&&i==2)
21             have=4;
22         if(have==5&&i!=2)
23             have=1;
24         if(have==3&&i==4)
25             have=4;
26         if(have==2&&i==2)
27             have=3;
28         if(have==2&&i==4)
29             have=1;
30         if(have==2&&i!=2&&i!=4)
31             have=0;
32         if(have==1&&i==6)
33             have=5;
34         if(have==0&&i==6)
35             have=2;
36         if(have==0&&i==4)
37             have=1;
38         sum+=dfs(pos-1,have,limit&&i==end);
39     }
40     if(!limit)
41         return dp[pos][flag]=sum;
42     return sum;
43 }
44 
45 long Cal(long n)
46 {
47     int pos=0;
48     while(n)
49     {
50         num[pos++]=n%10;
51         n/=10;
52     }
53     return dfs(pos-1,0,1);
54 }
55 
56 int main()
57 {
58     while(scanf("%ld%ld",&a,&b)==2)
59     {
60         if(a==0&&b==0)
61             return 0;
62         memset(dp,-1,sizeof(dp));
63         printf("%ld\n",b-a+1-Cal(b)+Cal(a-1));
64     }
65 }

 

 
posted @ 2013-04-30 08:40  ~~Snail~~  阅读(179)  评论(0)    收藏  举报