zoukankan      html  css  js  c++  java
  • P2657 [SCOI2009]windy数

    链接:https://www.luogu.org/problemnew/show/P2657

    题目描述

    windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,

    在A和B之间,包括A和B,总共有多少个windy数?

    输入输出格式

    输入格式:

    包含两个整数,A B。

    输出格式:

    一个整数

    输入输出样例

    输入样例#1: 复制
    1 10
    输出样例#1: 复制
    9
    输入样例#2: 复制
    25 50
    
    输出样例#2: 复制
    20
    

    说明

    100%的数据,满足 1 <= A <= B <= 2000000000 。

    题解:数位dp, 注意前面全是0的情况

    #include<bits/stdc++.h>
    using namespace std;
    
    int dp[20][10][2][2], digit[20], len;
    int dfs(int dep, int t, int f, int al){
        if(!dep)return 1;
        if(dp[dep][t][f][al])return dp[dep][t][f][al];
        int i = f ? digit[dep] : 9;
        int tmp = 0;
        for(; i >= 0; i--){
            if(abs(t - i) >= 2 || al) tmp += dfs(dep-1, i, f&&(i == digit[dep]), al&&(i==0));
        }
        return dp[dep][t][f][al] = tmp;
    }
    int query(int a){
        len = 0;
        memset(dp, 0, sizeof(dp));
        while(a){
            digit[++len] = a%10;
            a /= 10;
        }
       // if(len == 1)digit[++len] = 100;
        int ans = dfs(len, 0, 1, 1);
        //printf("%d
    ",ans);
        return ans;
    }
    
    int main(){
        int A, B, cnt ;
    
        scanf("%d%d", &A, &B);
        printf("%d
    ", query(B) - query(A-1));
    }
    View Code
  • 相关阅读:
    font-weight(字体粗细)属性
    Node.js入门(三)
    js难点问题
    Node.js入门(二)
    Node.js入门(一)
    Reactjs的Controller View模式
    智能社的邀请码
    react native 学习资料汇总
    jquery操作select
    分享
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/9353934.html
Copyright © 2011-2022 走看看