• hdu3555_数位dp


    http://acm.hdu.edu.cn/showproblem.php?pid=3555

    题意,1-n, 有多少个数含有49

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <cstdio>
     6 #include <vector>
     7 #include <ctime>
     8 #include <queue>
     9 #include <list>
    10 #include <set>
    11 #include <map>
    12 using namespace std;
    13 #define INF 0x3f3f3f3f
    14 typedef long long LL;
    15 
    16 LL dp[25][5];
    17 // dp[1][0] = 10;//没有49
    18 // dp[1][1] = 1;//9
    19 // dp[1][2] = 0;//有49
    20 void find()
    21 {
    22     memset(dp, 0, sizeof(dp));
    23     dp[0][0] = 1;
    24     for(int i = 1; i <= 20; i++)
    25     {
    26         dp[i][0] = (LL)dp[i - 1][0] * 10 - dp[i - 1][1];
    27         dp[i][1] = dp[i - 1][0];
    28         dp[i][2] = (LL)dp[i - 1][2] * 10 + dp[i - 1][1];
    29     }
    30 }
    31 
    32 void solve(LL n)
    33 {
    34     int len = 0;
    35     int bit[25];
    36     while(n)
    37     {
    38         bit[++len] = n % 10;
    39         n /= 10;
    40     }
    41     bit[len + 1] = 0;
    42     LL ans = 0;
    43     int flag = 0;
    44     for(int i = len; i > 0; i--)
    45     {
    46         ans += (LL)dp[i - 1][2] * bit[i];
    47         if(flag)
    48             ans += (LL)dp[i - 1][0] * bit[i];
    49         if(!flag && bit[i] > 4)
    50             ans += dp[i - 1][1];
    51         if(bit[i + 1] == 4 && bit[i] == 9)
    52             flag = 1;
    53     }
    54     printf("%I64d
    ", ans);
    55 }
    56 int main()
    57 {
    58     int t;
    59     LL n;
    60     scanf("%d", &t);
    61     find();
    62     while(t--)
    63     {
    64         scanf("%I64d", &n);
    65         solve(n + 1);
    66     }
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    P2813 母舰
    P5367 【模板】康托展开
    P1816 忠诚
    P3865 【模板】ST表
    P1913 L国的战斗之伞兵
    P4939 Agent2
    P1894 [USACO4.2]完美的牛栏The Perfect Stall
    P5017 摆渡车
    P1330 封锁阳光大学
    P5018 对称二叉树
  • 原文地址:https://www.cnblogs.com/luomi/p/5744540.html
Copyright © 2020-2023  润新知