zoukankan      html  css  js  c++  java
  • windy数

    windy数指的是相邻两位差至少为2的数。问区间[a,b]中有多少个windy数

    调了半个多小时,不过调出来之后对数位dp理解大大加深

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    inline int read()
    {
        int f=1,x=0;
        char ch=getchar();
        while(ch<'0' || ch>'9') {if(ch=='-') f=-1; ch=getchar();}
        while(ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    
    int a,b;
    int c[15],f[15][10][2];//f数组要开3位(这就是我为什么要调它)
    
    int dp(int pos,int num,bool done,bool flag)
    {
        
        if(pos==0) return 1;
        if(!flag && f[pos][num][done]!=-1) return f[pos][num][done];
        int res=0;
        int r=flag ? c[pos] : 9;
        for(int i=0;i<=r;i++)
        {
            if(abs(i-num)<2 && !done) continue;
            res+=dp(pos-1,i,done && i==0,flag && i==c[pos]);
        }
        f[pos][num][done]=res;
        return res;
    }
    
    int find(int x)
    {
        memset(f,-1,sizeof(f));
        int cnt=0;
        while(x>0)
        {
            c[++cnt]=x%10;
            x/=10;
        }
        return dp(cnt,0,1,1)-1;
    }
    
    int main()
    {
        a=read(); b=read();
        printf("%d
    ",find(b)-find(a-1));
        return 0;
    }
  • 相关阅读:
    Mat
    分治法-最近点对问题
    动态规划作业-最长公共子序列问题
    动态规划作业-多段图的最短路径问题
    OpenCV+VisualStudion2017配置
    R入门(二)-对象以及它们的模式和属性
    Big number
    R入门(一)
    Spring-aop
    Spring-ioc
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/10087885.html
Copyright © 2011-2022 走看看