zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    07-2. A+B和C (15)
    07-1. 换个格式输出整数 (15)
    07-0. 写出这个数 (20)
    06-3. 单词长度(15)
    06-2. 字符串字母大小写转换(10)
    06-1. 简单计算器(20)
    06-0. 混合类型数据格式化输入(5)
    05-3. 求a的连续和(15)
    05-2. 念数字(15)
    05-1. 约分最简分式(15)
  • 原文地址:https://www.cnblogs.com/luomi/p/5744540.html
Copyright © 2011-2022 走看看