hdu 2089 不要62

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089

题意:给出一个区间[l,r],求满足一个数的数位上没有连着62这个数字串的条件的个数。

解法:数位DP的入门题。

 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<cstdlib>

 5 #include<cmath>

 6 #include<algorithm>

 7 #define inf 0x7fffffff

 8 #define exp 1e-10

 9 #define PI 3.141592654

10 using namespace std;

11 int digit[8];

12 int dp[8][2];

13 int dfs(int len,bool state,bool fp)

14 {

15     if (!len) return 1;

16     if (!fp && dp[len][state]!=-1) return dp[len][state];

17     int ret=0;

18     int fpmax= fp ? digit[len] : 9 ;

19     for (int i=0 ;i<=fpmax ;i++)

20     {

21         if (i==4 || (state && i==2)) continue;

22         ret += dfs(len-1,i==6,fp && i==fpmax);

23     }

24     if (!fp) return dp[len][state]=ret;

25     return ret;

26 }

27 int f(int n)

28 {

29     int len=0;

30     while (n)

31     {

32         digit[++len]=n%10;

33         n /= 10;

34     }

35     return dfs(len,false,true);

36 }

37 int main()

38 {

39     int n,m;

40     while (cin>>n>>m)

41     {

42         if (!n && !m) break;

43         memset(dp,-1,sizeof(dp));

44         printf("%d\n",f(m)-f(n-1));

45     }

46     return 0;

47 }

 

你可能感兴趣的:(HDU)