zoukankan      html  css  js  c++  java
  • UVa 11361

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2346

    数位DP

    代码:

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    
    #define ll long long
    using namespace std;
    
    int dp[11][90][10002];
    int a[11];
    int c[11];
    int M;
    int dfs(int x,int k1,int k2,int flag)
    {
        if(x==-1)
        {
            if(k1==0&&k2==0)
            return 1;
            else
            return 0;
        }
        if(!flag&&dp[x][k1][k2]!=-1)
        return dp[x][k1][k2];
        int up=(flag)?a[x]:9;
        int sum=0;
        for(int i=0;i<=up;++i)
        {
            //sum+=dfs(x-1,(k1+i)%M,(k2*10+i)%M,flag&&(i==up));
    
            if(((k1-i)%M+M)%M<90)//两种递归,代表两种不同的含义,都是正确的
            sum+=dfs(x-1,((k1-i)%M+M)%M,((k2-i*c[x])%M+M)%M,flag&&(i==up));
    } if(!flag) dp[x][k1][k2]=sum; return sum; } int solve(int k) { int len=0; while(k) { a[len++]=k%10; k=k/10; } return dfs(len-1,0,0,1); } int main() { //freopen("data.in","r",stdin); int T; cin>>T; while(T--) { memset(dp,-1,sizeof(dp)); int a,b; cin>>a>>b>>M; c[0]=1; for(int i=1;i<=10;++i) c[i]=(c[i-1]*10)%M; //cout<<b<<" "<<solve(b)<<endl; cout<<solve(b)-solve(a-1)<<endl; } return 0; }

      

  • 相关阅读:
    MySQL详细操作
    啥是SQL?
    MySQL之中文乱码问题
    Windows压缩包安装MySQL
    GIL(全局解释器锁)
    协程
    线程
    第八周 编程作业
    PCA
    第八周 第一部分
  • 原文地址:https://www.cnblogs.com/liulangye/p/3175484.html
Copyright © 2011-2022 走看看