zoukankan      html  css  js  c++  java
  • uestc 1307 统计数位之间相差不小于2的数的个数

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

    解题思路:

    简单枚举+记忆化搜索

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cmath>
     6 using std::cout;
     7 using std::endl;
     8 typedef long long LL;
     9 int const N = 20;
    10 LL A,B;
    11 int bit[N],len;
    12 LL dp[N][11];
    13 LL getsum1(int t,int limit,int last,int limit2)
    14 {
    15      if(t==0)
    16      {
    17         if(!limit2)return (last==0?0:1);
    18         return 1;
    19      }
    20      if(!limit&&limit2&&dp[t][last]!=-1)return dp[t][last];
    21      int up=(limit?bit[t]:9);
    22      LL ans=0LL;
    23      for(int i=0;i<=up;i++)
    24      {
    25          if(abs(i-last)>=2||!limit2)
    26          {
    27               ans+=getsum1(t-1,limit&&(i==up),i,limit2||i);
    28          }
    29      }
    30      if(!limit&&limit2&&dp[t][last]==-1)dp[t][last]=ans;
    31      return ans;
    32 }
    33 LL getsum2(LL n)
    34 {
    35    if(n<10)return n;
    36    for(len=0;n;n/=10)bit[++len]=n%10;
    37    return getsum1(len,1,-2,0);
    38 }
    39 int main()
    40 {
    41     memset(dp,-1,sizeof(dp));
    42     while(~scanf("%I64d %I64d",&A,&B))
    43     {
    44          cout<<getsum2(B)-getsum2(A-1)<<endl;
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    git 初始化与使用
    java解析webservice服务返回的xml
    计算时间天数
    XML和Java bean转换
    微信公众号-企业
    docker安装openldap
    webservice使用
    idea解决冲突插件
    Java--JSON嵌套JSON中带''字符的解决方式
    微信公众号开发
  • 原文地址:https://www.cnblogs.com/nuoyan2010/p/3064626.html
Copyright © 2011-2022 走看看