站点一览:

  1. hdu 2089"不要62"
  2. hdu 4734"F(X)"
  3. poj 3252"Round Numbers"
  4. hdu 3709"Balanced Number"

 


 

1.hdu 2089"不要62"

题解:

  题目过于简单,不再赘述。

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 #define mem(a,b) memset(a,b,sizeof(a))
 6 
 7 int a,b;
 8 int digit[10];
 9 int dp[10][2];//dp[i][0]:位置i的前一个位置不为6的总方案数;dp[i][1]正好相反 
10 
11 int DFS(int curPos,int preNum,int isSix,bool limit)
12 {
13     if(curPos == -1)
14         return 1;
15     if(!limit && dp[curPos][isSix] != -1)
16         return dp[curPos][isSix];
17         
18     int up=limit ? digit[curPos]:9;
19     int ans=0;
20     for(int i=0;i <= up;++i)
21     {
22         if((preNum == 6 && i == 2) || i == 4)
23             continue;
24          ans += DFS(curPos-1,i,i == 6,limit&& i == digit[curPos]);
25     }
26     if(!limit)
27         dp[curPos][isSix]=ans;
28     return ans;
29 }
30 int Solve(int x)
31 {
32     int k=0;
33     while(x)
34     {
35         digit[k++]=x%10;
36         x /= 10;
37     }
38     return DFS(k-1,0,0,true);
39 }
40 
41 int main()
42 {
43     while(~scanf("%d%d",&a,&b) && a+b)
44     {
45         mem(dp,-1);
46         printf("%d\n",Solve(b)-Solve(a-1));
47     }
48     return 0;
49 }
View Code

相关文章: