• HDU 2089 不要62


    杭州人称那些傻乎乎粘嗒嗒的人为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
    题解: 数位DP入门;先处理出数字的每一位;然后对于每一位处理时,我们考虑是否为边界,如果不是边界,而且该初的值不为-1,则表示该位置的数已经求出,可以直接输出,否则,就从0到边界不断更新;

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 LL dp[10][2],n,m,digit[10];
     5 
     6 LL dfs(int pos,bool flag,bool judge)
     7 {
     8     if(pos==0) return 1;
     9     int sz= judge? digit[pos]:9;
    10     if(!judge && dp[pos][flag]!=-1) return dp[pos][flag];
    11     LL ans=0;
    12     for(int i=0;i<=sz;i++)
    13     {
    14         if(i==4) continue;
    15         if(flag && (i==2)) continue;
    16         ans+=dfs(pos-1,i==6,judge && (i==sz));
    17     }
    18     if(!judge) dp[pos][flag]=ans;
    19     return ans;
    20 }
    21 
    22 LL f(LL num)
    23 {
    24     int temp=0;
    25     while(num)
    26     {
    27         digit[++temp]=num%10;
    28         num/=10;
    29     }
    30     return dfs(temp,0,1);
    31 }
    32 
    33 int main()
    34 {
    35     while(scanf("%lld%lld",&n,&m),n+m)
    36     {
    37         memset(dp,-1,sizeof dp);
    38         printf("%lld
    ",f(m)-f(n-1));
    39     }
    40     
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    Dependency property changed example
    业务数据分析
    WPF : 以鼠标指针为中心缩放
    WPF待学习问题列表(未完)
    GirdView前台数据类型转换
    牛人的博客
    使用Xpath对XML进行模糊查询
    XPath语法
    【HDU】3415 Max Sum of MaxKsubsequence
    【HDU】3474 Necklace
  • 原文地址:https://www.cnblogs.com/csushl/p/9452838.html
Copyright © 2020-2023  润新知