zoukankan      html  css  js  c++  java
  • HDU 3555——Bomb

    HDU 3555——Bomb

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

    题意:让你找找不大于n的数里有多少含‘49’,

    我们发现,T很大,N很大,暴力指定不行,因为含不含'49'是每一位的性质,可以考虑数位dp,(况且这就是数位dp的模板形式啊喂),因为在模板的基础改的,所以找的是1-n有多少个数不含49,总数减一下就行

    dp状态记为dp[当前是第几位][前一位是不是4],所以第二维开到2就够用啦

    模板题,上代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 ll a[1000009];
     5 ll dp[20][2];
     6 ll dfs(ll pos,ll num,bool limit)///num为上一位是否是4
     7 {
     8     if(!limit&&dp[pos][num]!=-1) return dp[pos][num];
     9     if(pos==0) return 1;
    10     ll up=limit?a[pos]:9;
    11     ll res=0;
    12     for(ll i=0;i<=up;i++)
    13     {
    14         if(i==9&&num) continue;
    15         res+=dfs(pos-1,i==4,limit&&i==a[pos]);
    16     }
    17     if(!limit) dp[pos][num]=res;
    18     return res;
    19 }
    20 ll solve(ll x)
    21 {
    22     ll pos=0;
    23     while(x)
    24     {
    25         a[++pos]=x%10;
    26         x/=10;
    27     }
    28     return dfs(pos,0,1);
    29 }
    30 int main()
    31 {
    32     memset(dp,-1,sizeof(dp));
    33     ll a,t;
    34     scanf("%lld",&t);
    35     while(t--)
    36     {
    37         scanf("%lld",&a);
    38         printf("%lld
    ",a+1-solve(a));
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    BootStrap练习
    表单控件练习
    K近邻算法原理
    CSS 边框和颜色
    SVG平移和旋转
    SVG进阶练习
    SVG路标(marker)
    SVG 曲线与文字
    python函数与异常处理
    if-elif-else分支判断语句(附加continue和break)---举例说明
  • 原文地址:https://www.cnblogs.com/YangKun-/p/12633086.html
Copyright © 2011-2022 走看看