zoukankan      html  css  js  c++  java
  • BZOJ 1026 数位dp

    1026: [SCOI2009]windy数

    题意:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?

    tags:不知道怎么说,还是直接看代码吧

    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define FF(i,a,b) for (int i=a;i<=b;i++)
    #define F(i,b,a)  for (int i=b;i>=a;i--)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N = 2e5+10;
    
    int a, b;
    ll dp[12][11];
    void Init()
    {
        FF(j,0,9) dp[1][j]=1;
        FF(i,2,10) FF(j,0,9) FF(l,0,9) {    //j要处理到0
            if(abs(j-l)>=2) dp[i][j]+=dp[i-1][l];
        }
    }
    ll cal(int x)
    {
        ll ans=0;
        int di[12], k=0;
        while(x) di[++k]=x%10, x/=10;
        FF(i,1,k-1) FF(j,1,9) ans+=dp[i][j];  
        FF(j,1,di[k]-1) ans+=dp[k][j];      
        F(i,k-1,1) {    
            FF(j,0,di[i]-1) if(abs(di[i+1]-j)>=2) ans+=dp[i][j];   //不会处理到x本身
            if(abs(di[i+1]-di[i])<2) break;
        }
        return ans;
    }
    int main()
    {
        scanf("%d%d", &a, &b);
        Init();
        printf("%lld
    ", cal(b+1)-cal(a));
    
        return 0;
    }
  • 相关阅读:
    day 1 认识js
    day2,request对象
    day3
    day 14 函数的嵌套,作用域
    命名空间(名称空间)
    day 13 函数
    day 11(2) 集合
    day 11 字典拆包
    字典
    两周英语函数(记)
  • 原文地址:https://www.cnblogs.com/sbfhy/p/6408179.html
Copyright © 2011-2022 走看看