• hdu2089不要62(数位dp)


     1 #include <stdio.h>
     2 #include <string.h>
     3 int dp[10][3];
     4 int num[10];
     5 /*
     6 dp[i][0] 不含62,4
     7 dp[i][1]  2开头
     8 dp[i][2] 含62或4
     9 */
    10 void init()
    11 {
    12     int i;
    13     dp[0][0] = 1;
    14     for(i=1; i<10; ++i)
    15     {
    16         dp[i][0] = dp[i-1][0] * 9 - dp[i-1][1];
    17         dp[i][1] = dp[i-1][0];
    18         dp[i][2] = dp[i-1][2] * 10 + dp[i-1][1] + dp[i-1][0];
    19     }
    20 }
    21 int getAns(int n)
    22 {
    23     int i,len=0,ans=0;
    24     int t = n;
    25     while(n)
    26     {
    27         num[++len] = n % 10;
    28         n /= 10;
    29     }
    30     num[len+1] = 0;
    31     bool flag = false;
    32     
    33     for(i=len; i>=1; --i)
    34     {
    35         ans += num[i] * dp[i-1][2];
    36         if(flag)
    37         {
    38             ans += num[i] * dp[i-1][0];
    39         }
    40         else if(num[i]>4)//当前为取4
    41             ans += dp[i-1][0];
    42         if(!flag && num[i]>6)//当前位取6
    43             ans += dp[i-1][1];
    44         if(!flag && num[i+1]==6&&num[i]>2)
    45             ans += dp[i][1];
    46         if(num[i+1]==6 && num[i]==2)
    47             flag = true;
    48         if(num[i]==4)
    49             flag = true;
    50     }
    51     
    52     return ans;
    53 }
    54 int main()
    55 {
    56     int n,m;
    57     init();
    58     while(scanf("%d%d",&n,&m))
    59     {
    60         if(n==0 && m==0)
    61             break;
    62         
    63         int t = getAns(m+1) - getAns(n);
    64         printf("%d
    ",m-n+1-t);
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    Java基础-Object通用方法
    Java基础-关键字
    Java基础-运算
    Java基础-String
    Java基础-数据类型
    GCN-GAN:对加权动态网络的非线性时间链路预测模型
    长短期记忆(long short-term memory, LSTM)
    CSP 201604-1 折点计数
    介绍一个好东西C++11
    malloc free使用规范
  • 原文地址:https://www.cnblogs.com/justPassBy/p/4277192.html
Copyright © 2020-2023  润新知