zoukankan      html  css  js  c++  java
  • 数位DP BZOJ 1026 [SCOI2009]windy数

    题目链接

    前面全是0的情况特判

    #include <bits/stdc++.h>
    
    int dp[10][10];
    int digit[10];
    
    int DFS(int pos, int val, int zero, bool limit) {
        if (pos == -1) {
            return 1;
        }
        int &now = dp[pos][val];
        if (!limit && zero && now != -1) {
            return now;
        }
        int d = limit ? digit[pos] : 9;
        int ret = 0;
        if (zero == 0) {
            for (int i=0; i<=d; ++i) {
                ret += DFS (pos - 1, i, i, limit && i == d);
            }
        } else {
            for (int i=0; i<=d; ++i) {
                if ((i-val) * (i - val) < 4) {
                    continue;
                }
                ret += DFS (pos - 1, i, 1, limit && i == d);
            }
        }
        if (!limit && zero) {
            now = ret;
        }
        return ret;
    }
    
    int solve(int x) {
        int n = 0;
        while (x) {
            digit[n++] = x % 10;
            x /= 10;
        }
        int ret = 0;
        return DFS (n - 1, 0, 0, true);
    }
    
    int main() {
        memset (dp, -1, sizeof (dp));
        int a, b;
        while (scanf ("%d%d", &a, &b) == 2) {
            printf ("%d
    ", solve (b) - solve (a - 1));
        }
        return 0;
    }
    

      

  • 相关阅读:
    数据应用
    Python邮件脚本
    函数
    tab模块
    python登陆,注册小程序
    三元运算+lambda表达式
    计算机基础
    软件测试概要
    asyn_fifo
    perl 对ENV环境变量的使用
  • 原文地址:https://www.cnblogs.com/Running-Time/p/5503302.html
Copyright © 2011-2022 走看看