zoukankan      html  css  js  c++  java
  • hdu 3555 数位DP

    找0~n 有多少个含有49的数直接DP

    dp[i][j][k]  到第 i位  前面一位是j  k是是否含有49了  随便记录一下就可以了

    #include <iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std ;
    
    #define ll long long
    
    int dig[20];
    ll dp[20][10][2];
    
    ll dfs(int len,int now,int ok,int e)
    {
        if(len<0)
            return (ok==1);
        if(!e&&dp[len][now][ok]!=-1)
            return dp[len][now][ok];
        int u=e?dig[len]:9;
        ll ans=0;
        for(int i=0;i<=u;i++)
        {
            if(now==4&&i==9)
                ans=ans+dfs(len-1,i,1,e&&(i==u));
            else
                ans=ans+dfs(len-1,i,ok,e&&(i==u));
        }
        if(!e)
            dp[len][now][ok]=ans;
        return ans;
    }
    ll calc(ll n)
    {
        int cnt=0;
        while(n)
        {
            dig[cnt++]=n%10;
            n=n/10;
        }
        return dfs(cnt-1,0,0,1);
    }
    
    
    int main()
    {
        memset(dp,-1,sizeof(dp));
        int t;
        scanf("%d",&t);
        while(t--)
        {
            ll n;
            scanf("%lld",&n);
            printf("%lld
    ",calc(n));
        }
        return 0;
    }
    View Code
  • 相关阅读:
    jQuery对表单的操作
    js-工厂模式
    js中call、apply、bind的区别
    js实现重载和重写
    js封装/继承/多态
    变量的解构赋值
    var & let & const 的区别
    jQuery之animate中的queue
    jQuery之动画
    .trigger
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6861492.html
Copyright © 2011-2022 走看看