zoukankan      html  css  js  c++  java
  • 杭电2089----不要62

     1 //数位dp入门
     2 #include<cstdio>
     3 int a[8],d[8][3];
     4 
     5 void init()
     6 {
     7     d[0][0] = 1;
     8     for(int i=1; i<7; ++i)
     9     {
    10         d[i][0] = d[i-1][0]*9 - d[i-1][1];              //当前位全部吉利数个数
    11         d[i][1] = d[i-1][0];                            //当前位为2的全部吉利数的个数
    12         d[i][2] = d[i-1][2]*10 + d[i-1][0] + d[i-1][1]; //当前位全部不吉利数个数
    13     }
    14 }
    15 
    16 int solven(int x)                                       //求小于x的吉利数个数
    17 {
    18     int t = x,pos = 0;
    19     while(x != 0)
    20     {
    21         a[++pos] = x%10;
    22         x /= 10;
    23     }
    24     a[pos+1] = 0;                                       //防止数据之间的影响
    25     int flag = 0,ans = 0;
    26     for(int i=pos; i>0; --i)                            //求0-x之间不吉利数个数
    27     {
    28         ans += d[i-1][2]*a[i];
    29         if(flag != 0)
    30             ans += d[i-1][0]*a[i];
    31         else
    32         {
    33             if(a[i] > 4)                                //高位可能为4
    34                 ans += d[i-1][0];
    35             if(a[i] > 6 || (a[i] == 6 && a[i-1] > 2))   //高位出现62
    36                 ans += d[i-1][1];
    37             if(a[i] == 4 || (a[i+1] == 6 && a[i] == 2)) //前面已经出现了62或者4
    38                 flag = 1;
    39         }
    40     }
    41     return t-ans;
    42 }
    43 
    44 int main()
    45 {
    46     init();
    47     int n,m;
    48     while(~scanf("%d%d",&n,&m) && n+m != 0)
    49         printf("%d
    ",solven(m+1) - solven(n));
    50     return 0;
    51 }
  • 相关阅读:
    mysql 锁相关的视图(未整理)
    MYSQL的用户变量(@)和系统变量(@@)
    mysql杀死线程
    mysql 系统变量和session变量
    Oracle DB 移动数据
    MySQL数据库------常用函数
    练习-----查询
    练习建表
    课堂笔记总结
    数据库--------用代码来创建表
  • 原文地址:https://www.cnblogs.com/qq188380780/p/6816963.html
Copyright © 2011-2022 走看看