zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    ER图
    uml图
    第一个迭代任务的制作
    软件测试
    实训记录
    UML系列图——ER图
    UML系列图——用例图
    第一个迭代任务进度
    第一个迭代任务
    需求分析——WBS
  • 原文地址:https://www.cnblogs.com/AC-Phoenix/p/4425665.html
Copyright © 2011-2022 走看看