zoukankan      html  css  js  c++  java
  • Acwing 1085. 不要62 数位DP

    地址 https://www.acwing.com/problem/content/description/1087/

    杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。
    
    杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
    
    不吉利的数字为所有含有 462 的号码。例如:62315,73418,88914 都属于不吉利号码。但是,61152 虽然含有 62,但不是 连号,所以不属于不吉利数字之列。
    
    你的任务是,对于每次给出的一个牌照号区间 [n,m],推断出交管局今后又要实际上给多少辆新的士车上牌照了。
    
    输入格式
    输入包含多组测试数据,每组数据占一行。
    
    每组数据包含一个整数对 n 和 m。
    
    当输入一行为“0 0”时,表示输入结束。
    
    输出格式
    对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
    
    数据范围
    1≤n≤m≤109
    输入样例:
    1 100
    0 0
    输出样例:
    80

    解答 

    数位DP

    // 11235.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    const int N = 20;
    
    int dp[N][10];
    
    int l, r;
    
    void init()
    {
        for (int i = 0; i <= 9; i++) dp[1][i] = 1;
        dp[1][4] = 0;
    
        for (int i = 2; i <= N; i++) {
            for (int j = 0; j <= 9; j++) {
                if (j == 4) continue;
                for (int k = 0; k <= 9; k++) {
                    if (k == 4 || (k == 2 && j == 6)) continue;
                    dp[i][j] += dp[i - 1][k];
                }
            }
        }
    }
    
    int dpfunc(int n)
    {
        if (n == 0) return 1;
    
        vector<int> nums;
        while (n != 0) {nums.push_back(n % 10); n = n / 10;}
    
        int ans = 0; int last = 0;
        for (int i = nums.size() - 1; i >= 0; i--) {
            int x = nums[i];
            for (int j = 0; j < x; j++) {
                if (j == 4 || (last == 6 && j == 2)) continue;
                ans += dp[i+1][j];
            }
    
            if (x==4 || (last == 6 && x == 2)) break;
    
            last = x;
            if (i == 0) ans++;
        }
        
    
        return ans;
    }
    
    
    
    
    int main()
    {
        init();
        while (cin >> l >> r, l || r) {
            cout << dpfunc(r) - dpfunc(l - 1) << endl;
        }
    
    
        return 0;
    }
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Ambient Intelligence in Networked Society
    如何定位问题及如何区分前后端BUG
    接口测试-结合Postman的使用
    Selenium的PageObject设计模式(2)
    Selenium的PageObject设计模式(1)
    Git+Pycharm 分布式版本管理
    php中不用内置函数实现字符串转整形
    mysql中case使用
    快速排序
    魔术方法__sleep(),__wakeup()
  • 原文地址:https://www.cnblogs.com/itdef/p/13773036.html
Copyright © 2011-2022 走看看