zoukankan      html  css  js  c++  java
  • HDU 2089:不要62(数位DP)

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

    不要62

    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
     
    数位dp适合在一段数的区间内找出满足某些条件的数的个数,这个时候往往不能之间遍历,肯定会超时,则一般使用数位dp来解决。
     
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 using namespace std;
     6 
     7 int dp[10][2];
     8 int bit[10];
     9 /*
    10 数位DP入门
    11 dp[pos][1]表示pos+1位为6的情况
    12 dp[pos][0]表示正常
    13 */
    14 int dfs(int pos,bool st,bool flag)
    15 {
    16     if(!pos) return 1;
    18     if(flag&&dp[pos][st]!=-1) return dp[pos][st];
    19     int u=flag?9:bit[pos];
    20     int ans=0;
    21     for(int d=0;d<=u;d++){
    22         if(d==4||st&&d==2) continue;
    23         ans+=dfs(pos-1,d==6,flag||d<u);
    24     }
    25     if(flag) dp[pos][st]=ans;
    26     return ans;
    27 }
    28 
    29 int solve(int n)
    30 {
    31     int len=0;
    32     while(n){
    33         bit[++len]=n%10;
    34         n/=10;
    35     }
    36     return dfs(len,0,0);
    37 }
    38 
    39 int main()
    40 {
    41     int l,r;
    42     memset(dp,-1,sizeof(dp));
    43     while(cin>>l>>r){
    44         if(l+r==0) break;
    45         cout<<solve(r)-solve(l-1)<<endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    课时28:文件:因为懂你,所以永恒
    课时27:集合:在我的世界里,你就是唯一
    课时26:字典:各种内置方法
    课时25:字典:当索引不好用时
    课时24:递归:汉诺塔
    课时23:递归:这帮小兔崽子
    课时22:函数:递归是神马
    有序表查找-折半查找
    C#
    C#
  • 原文地址:https://www.cnblogs.com/fightfordream/p/5632405.html
Copyright © 2011-2022 走看看