码迷,mamicode.com
首页 > 其他好文 > 详细

hud2089_数位dp

时间:2016-08-05 21:34:31      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

http://acm.hdu.edu.cn/showproblem.php?pid=2089

转载自http://blog.csdn.net/acm_cxlove/article/details/7819907

n - m 的树中不含4和62的数有多少个

技术分享
 1 #include<iostream>
 2 #include<cstring>
 3 #include<queue>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<algorithm>
 7 #define N 55
 8 #define inf 1<<29
 9 #define MOD 9973
10 #define LL long long
11 #define eps 1e-7
12 #define zero(a) fabs(a)<eps
13 #define equal(a,b) zero(a-b)
14 using namespace std;
15 int dp[10][3];
16 //dp[i][0],表示不存在不吉利数字
17 //dp[i][1],表示不存在不吉利数字,且最高位为2
18 //dp[i][2],表示存在不吉利数字
19 void Init(){
20     memset(dp,0,sizeof(dp));
21     dp[0][0]=1;
22     for(int i=1;i<=6;i++){
23         dp[i][0]=dp[i-1][0]*9-dp[i-1][1];  //在最高位加上除了4之外的9个数字,但是可能在2之前加了6
24         dp[i][1]=dp[i-1][0];    //就是在原先不含不吉利数字的最高位加2
25         dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1];  //在已经有不吉利数字最高位加任意数字,或者在无吉利数字前加4,或者在2前面加4
26     }
27 }
28 int slove(int n){
29     int len=0,bit[10];
30     int tmp=n;
31     while(n){
32         bit[++len]=n%10;
33         n/=10;
34     }
35     bit[len+1]=0;
36     int ans=0;
37     bool flag=false;
38     for(int i=len;i;i--){
39         ans+=dp[i-1][2]*bit[i];  
40         if(flag)   //高位已经出现4或者62,后面的就随意
41             ans+=dp[i-1][0]*bit[i];
42         if(!flag&&bit[i]>4)  //高位可能出现4的情况
43             ans+=dp[i-1][0];
44         if(!flag&&bit[i+1]==6&&bit[i]>2)  //高位是6,后面一位可能出现2,这步debug了很久
45             ans+=dp[i][1];
46         if(!flag&&bit[i]>6)  //高位可能出现6,要把后面最高位为2计入
47             ans+=dp[i-1][1];
48         if(bit[i]==4||(bit[i+1]==6&&bit[i]==2))  //高位已经出现4或者62
49             flag=true;
50     }
51     return tmp-ans;
52 }
53 int main(){
54     int l,r;
55     Init();
56     while(scanf("%d%d",&l,&r)!=EOF&&l+r)
57         printf("%d\n",slove(r+1)-slove(l));
58     return 0;
59 }
View Code

 

hud2089_数位dp

标签:

原文地址:http://www.cnblogs.com/luomi/p/5742740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!