• hdu 3555


    数位DP,各种理解难题

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #define LL long long
    using namespace std;
    unsigned long long n;
    LL f1[25],f2[25],f3[25];
    int s[25];
    int t;
    int main()
    {
        cin>>t;
        int i,j,k;
       f1[0]=0;f2[0]=1;f3[0]=0;
        for(i=1;i<=19;i++)
        {
            f1[i]=f1[i-1]*10+f3[i-1];
            f2[i]=10*f2[i-1]-f3[i-1];
            f3[i]=f2[i-1];
        }
        while(t--)
        {
            scanf("%I64d",&n);
            n++;//因为判断n时只判断了n-1,比如492只判断了491就结束了,但492也是一种情况
            LL sum=0;
            i=0;
            while(n)
            {
                s[i++]=n%10;
                n/=10;
            }
            int len=i;
            int num,pre=-1;
            int flag=0;
            for(i=len-1;i>=0;i--)
            {
                num=s[i];
                j=i+1;
                for(k=0;k<num;k++)
                {
                    sum+=f1[j-1];
                    if(flag) sum+=f2[j-1];
                    if(!flag&&k==4) sum+=f3[j-1];//此处还要加上!flag的条件,如果flag==1那么此种情况在上一行就已经算进去了
                }
                if(num==9&&pre==4) flag=1;
                pre=num;
            }
            printf("%I64d\n",sum);
        }
        return 0;
    }
    


  • 相关阅读:
    MySQL系列
    Python小白之路
    nrm安装使用(mac)
    npm 发布一个包(已有自己私服的情况)
    vuex简单使用
    在vue中使用ztree树插件
    题库1
    设计模式读书笔记
    ORM框架学习之EF
    net+Oracle开发过程中遇到的小问题
  • 原文地址:https://www.cnblogs.com/lj030/p/3065569.html
Copyright © 2020-2023  润新知