• hdu3555 Bomb 数位dp


    //3555

    //题意:统计 1 到 n 中包含 49 的数的个数

     1 #include "bitsstdc++.h"
     2 using namespace std;
     3 __int64 dp[22][3];
     4 
     5 int main()
     6 {
     7     int i;
     8     dp[0][0] = 1;
     9     for(i = 1; i <= 20; ++i) {
    10         dp[i][0] = dp[i - 1][0] * 10 - dp[i - 1][1] * 1;
    11         dp[i][1] = dp[i - 1][0] * 1;
    12         dp[i][2] = dp[i - 1][1] * 1 + dp[i - 1][2] * 10;
    13     }
    14     int T;
    15     scanf("%d", &T);
    16     while(T--) {
    17         __int64 n;
    18         scanf("%I64d", &n);
    19         int len = 0;
    20         int digit[22];
    21         memset(digit, 0, sizeof(digit));
    22         ++n;
    23         while(n) {
    24             ++len;
    25             digit[len] = n % 10;
    26             n /= 10;
    27         }
    28         __int64 res = 0;
    29         bool _49 = 0;
    30         for(i = len; i >= 1; --i) {
    31             //如果已经出现 49 ,则加上第 i 位 -1 后所有数的个数
    32             if(_49) {
    33                 res += (dp[i - 1][0] + dp[i - 1][2]) * digit[i];
    34             }
    35             //如果未出现 49, 则加上第 i 位 -1 后所有符合要求的数的个数
    36             else {
    37                 res += dp[i - 1][2] * digit[i];
    38                 if(digit[i] > 4)
    39                     res += dp[i - 1][1] * 1;
    40                 if(digit[i + 1] == 4 && digit[i] == 9)
    41                     _49 = 1;
    42             }
    43             //下一次循环处理,第 i 位 == 原数的情况
    44         }
    45         printf("%I64d
    ", res);
    46     }
    47 }
  • 相关阅读:
    MFC的初始化过程和消息映射技术
    一些函数
    对话框相关
    windows新的数据类型
    VC++函数(win32_exe)
    Visual C++基础知识(win32exe)
    Keil C减小代码编译量大小的方法(gai)
    CM3存储器系统
    SPI总线
    SMBUS(IIC)总线
  • 原文地址:https://www.cnblogs.com/AC-Phoenix/p/4425665.html
Copyright © 2020-2023  润新知