zoukankan      html  css  js  c++  java
  • hdu3555 Bomb(数位dp)

                                                       Bomb

                                                                                        Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
                                                                                                                 Total Submission(s): 18060    Accepted Submission(s): 6639

    Problem Description
    The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence "49", the power of the blast would add one point.
    Now the counter-terrorist knows the number N. They want to know the final points of the power. Can you help them?
    Input
    The first line of input consists of an integer T (1 <= T <= 10000), indicating the number of test cases. For each test case, there will be an integer N (1 <= N <= 2^63-1) as the description.
    The input terminates by end of file marker.
    Output
    For each test case, output an integer indicating the final points of the power.
    Sample Input
    3
    1
    50
    500
    Sample Output
    0
    1
    15
    Hint
    From 1 to 500, the numbers that include the sub-sequence "49" are "49","149","249","349","449","490","491","492","493","494","495","496","497","498","499", so the answer is 15.
    Author
    fatboy_cw@WHU
     
    Source
    推荐一份题解 写的很好  点我
     
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cctype>
    #include<cmath>
    #include<cstring>
    #include<map>
    #include<stack>
    #include<set>
    #include<vector>
    #include<algorithm>
    #include<string.h>
    typedef long long ll;
    typedef unsigned long long LL;
    using namespace std;
    const int INF=0x3f3f3f3f;
    const double eps=0.0000000001;
    const int N=100;
    ll dp[N][N];
    int a[N];
    void init(){
        memset(dp,0,sizeof(dp));
        dp[0][0]=1;dp[0][1]=0;dp[0][2]=0;
        for(int i=1;i<=20;i++){
            dp[i][0]=dp[i-1][0]*10-dp[i-1][1];
            dp[i][1]=dp[i-1][0];
            dp[i][2]=dp[i-1][1]+dp[i-1][2]*10;
        }
    }
    int main()
    {
        int T;
        init();
        scanf("%d",&T);
        while(T--){
            memset(a,0,sizeof(a));
            ll n;
            scanf("%I64d",&n);
            n++;
            int t=0;
            while(n){
                a[++t]=n%10;
                n/=10;
            }
            a[t+1]=0;
            int flag=0;
            ll sum=0;
            for(int i=t;i>=1;i--){
                sum=sum+dp[i-1][2]*a[i];
                if(flag==0&&a[i]>4)  sum=sum+dp[i-1][1];
                if(flag)    sum=sum+dp[i-1][0]*a[i];
                if(a[i+1]==4&&a[i]==9)  flag=1;
            }
            cout<<sum<<endl;
        }
        return 0;
    }

     
  • 相关阅读:
    第四章 使用jQuery操作DOM
    第三章 jQuery中的事件与动画
    第二章 jQuery选择器
    第一章 jQuery基础
    第五章 JavaScript对象及初识面向对象
    第四章 JavaScript操作DOM对象
    第三章 JavaScript操作BOM对象
    第二章 JavaScript核心语法
    第一章 Javascript基础
    第九章 MySQL中LIMIT和NOT IN案例
  • 原文地址:https://www.cnblogs.com/Aa1039510121/p/6833480.html
Copyright © 2011-2022 走看看