zoukankan      html  css  js  c++  java
  • POJ 3286 How many 0's?

    状态表示:
    (f[len][cnt]):当前为len位,已经统计的(0)的个数为cnt,不计前导(0)

    注意点:
    由于前导(0)标识符lead的存在,如果左边界为(0)需要作加一处理。

    LL f[15][15];
    int a[15];
    
    LL dfs(int len,int cnt,bool lead,bool limit)
    {
        if(!len) return cnt;
        if(!limit && !lead && ~f[len][cnt])
            return f[len][cnt];
    
        int num=limit?a[len-1]:9;
        LL res=0;
        for(int i=0;i<=num;i++)
        {
            res+=dfs(len-1,cnt+(!lead&&i==0),lead&&i==0,limit&&i==num);
        }
        if(!lead && !limit) f[len][cnt]=res;
        return res;
    }
    
    LL dp(LL n)
    {
        int len=0;
        while(n)
        {
            a[len++]=n%10;
            n/=10;
        }
        return dfs(len,0,1,1);
    }
    
    int main()
    {
        LL l,r;
        memset(f,-1,sizeof f);
        while(cin>>l>>r)
        {
            if(l<0 || r<0) break;
    
            LL res=dp(r)-dp(l-1);
            if(l == 0) res++;
            cout<<res<<endl;
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    orm操作
    模板语言
    路由
    newlib中printf库函数的实现
    调试问题记录
    GCC部分编译选项解析
    Lauterbach TRACE32使用技巧记录
    ARM32 页表映射过程
    TTBR0与TTBR1
    Camera Sensor基础知识
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14425124.html
Copyright © 2011-2022 走看看