• hdu 3555 数位dp *


    题意:求包含49的数字,先求不包含的,然后减一下就行了

    链接:点我

    如果不懂这种数位dp代码,可以看我博客dp专题里的初探数位dp

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 typedef __int64 ll;
    13 #define cl(a) memset(a,0,sizeof(a))
    14 #define ts printf("*****
    ");
    15 const int MAXN=105;
    16 int n,m,tt;
    17 ll dp[MAXN][2];    //0表示前面不为4
    18 int digit[MAXN];
    19 ll dfs(int p,int s,bool e) {
    20     if (p==-1) return 1;
    21     if (!e &&dp[p][s]!=-1) return dp[p][s];
    22     ll res = 0;
    23     int u = e?digit[p]:9;
    24     for (int i=0;i<=u;++i)
    25     {
    26         if(s==1&&i==9)  continue;
    27         res+=dfs(p-1,i==4,e&&i==u);
    28     }
    29     return e?res:dp[p][s]=res;
    30 }
    31 ll solve(ll n)
    32 {
    33     int len=0;
    34     while(n)
    35     {
    36         digit[len++]=n%10;
    37         n/=10;
    38     }
    39     return dfs(len-1,0,1);
    40 }
    41 int main()
    42 {
    43     int i,j,k;
    44     #ifndef ONLINE_JUDGE
    45     freopen("1.in","r",stdin);
    46     #endif
    47     scanf("%d",&tt);
    48     ll x;
    49     memset(dp,-1,sizeof(dp));
    50     while(tt--)
    51     {
    52         scanf("%I64d",&x);
    53         printf("%I64d
    ",x-solve(x)+1);
    54     }
    55 }
  • 相关阅读:
    python .npy 存取 dict
    python 找零钱方案
    docker 容器里显示图形
    docker 安装vim
    软件测试基础知识
    Git命令——学习笔记2
    Git命令——学习笔记1
    Win10配置Git环境变量与基本使用
    Selenium Web自动化测试——基于unittest框架的PO设计模式
    Django+Celery学习笔记5——定时推送消息
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4527296.html
Copyright © 2020-2023  润新知