• UESTC 250


    windy数

    基本的数位DP,需要判断当前位是否为起始位。

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    #define D(x) x
    
    const int MAX_DIGIT = 35;
    
    int n, m;
    int f[MAX_DIGIT];
    int memoize[MAX_DIGIT][2][2][15];
    
    void to_digits(int a)
    {
        for (int i = 0; i < MAX_DIGIT; i++)
        {
            f[i] = a % 10;
            a /= 10;
        }
    }
    
    int dfs(int digit, bool less, bool first, int last)
    {
        if (digit == -1)
        {
            return 1;
        }
        if (memoize[digit][less][first][last] != -1)
        {
            return memoize[digit][less][first][last];
        }
        int limit = less ? 9 : f[digit];
        int ret = 0;
        for (int i = 0; i <= limit; i++)
        {
            if (!first && abs(i - last) < 2)
            {
                continue;
            }
            ret += dfs(digit - 1, less || i < f[digit], first && i == 0, i);
        }
        memoize[digit][less][first][last] = ret;
        return ret;
    }
    
    int main()
    {
        scanf("%d%d", &n, &m);
        n--;
        to_digits(n);
        memset(memoize, -1, sizeof(memoize));
        int ans_n = dfs(32, false, true, 12);
        to_digits(m);
        memset(memoize, -1, sizeof(memoize));
        int ans_m = dfs(32, false, true, 12);
        printf("%d
    ", ans_m - ans_n);
        return 0;
    }
    View Code
  • 相关阅读:
    Java 连接 Memcached 服务
    Memcached命令-存储命令-查找命令-清理命令
    memcache安装
    Python爬虫模拟登录带验证码网站
    HashMap原理
    redis 在java中的使用
    redis 事务
    Redis命令续
    Redis命令
    ApplicationListener用法
  • 原文地址:https://www.cnblogs.com/rainydays/p/4260856.html
Copyright © 2020-2023  润新知