• AcWing311 月之谜(数位dp)


    这道题需要知道该数是不是数字之和的倍数

    数字之和比较好统计,但是有个问题是,每一次进行运算的时候,因为数一直在变化,所以当前数mod数字之和成不成立与之后的没有关系

    所以我们考虑枚举模数,因为数字之和本来也没有多大

    这样我们只需要在最后判断一下答案就行

    #include<iostream>
    #include<cstring>
    #include<string>
    using namespace std;
    int f[20][100][100][2];
    string l,r;
    string s;
    int sum;
    int len;
    int dfs(int cur, int sum1, int r, int flag){
        if(cur==len)
        return sum1==sum&&r==0;
        auto &x=f[cur][sum1][r][flag];
        if(x!=-1)
        return x;
        int v=9;
        if(flag)
        v=s[cur]-'0';
        int i;
        int ans=0;
        for(i=0;i<=v;i++){
            ans+=dfs(cur+1,sum1+i,(10*r+i)%sum,flag&(i==v));
        }
        return x=ans;
    }
    
    int solve(string t){
        s = t;
        len = s.size();
        memset(f,-1,sizeof(f));
        return dfs(0,0,0,1);
    }
    int check(string s){
        int i;
        int sum1=0;
        int r=0;
        for(i=0;i<s.size();i++){
            int x=s[i]-'0';
            sum1+=x;
            r=(r*10+x)%sum;
        }
        return sum1==sum&&(r==0);
    }
    int main(){
        cin>>l>>r;
        int ans=0;
        int i;
        for(sum=1;sum<=90;sum++){
            ans+=(solve(r)-solve(l)+check(l));
        }
        cout<<ans<<endl;
    }
    View Code
  • 相关阅读:
    图解 SQL 各种连接查询之间的区别
    虚拟机Ubuntu无法上网问题解决过程
    SQL语言(二) java怎样连接操作数据库中的数据
    SQL语言(一)
    编写简单的用户登录界面
    Java
    java第一阶段测试
    Net Core linux docker 部署异常
    .Net Core Cap 异常
    记.Net 创建文件
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12697884.html
Copyright © 2020-2023  润新知