zoukankan      html  css  js  c++  java
  • uva11361数位dp

    挺裸的 ,只要注意到当k超过9*10  就直接输出0就可以了。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <map>
    #include <cstdlib>
    #include <list>
    #include <set>
    #include <queue>
    #include <stack>
    #include <math.h>
    using namespace std;
    
    typedef long long LL;
    LL dp[15][150][150];
    LL k;
    LL path[1000];
    
    LL gao(LL x, LL sum, LL mod, LL flag)
    {
        if (~dp[x][sum][mod]&&!flag) return  dp[x][sum][mod];
        if (x == 0){
            if (sum%k == 0 && mod == 0) return 1;
            else return 0;
        }
        LL  bound = flag ? path[x] : 9;
        LL ans = 0;
        for (LL i = 0; i <= bound; i++){
           // if((mod* 10+ i ) % k > 100) continue;
            ans += gao(x - 1, sum + i, (mod * 10 + i) % k, flag && (i == bound));
        }
        return flag?ans : dp[x][sum][mod] = ans;
    }
    
    LL solve(LL x)
    {
        LL ret = 0;
        while (x){
            path[++ret] = x % 10;
            x /= 10;
        }
        return gao(ret, 0, 0, 1);
    }
    
    
    
    int main()
    {
        LL a, b;
        LL Icase;
        cin >> Icase;
        while (Icase--){
            cin >> a >> b >> k;
            if(k>90){
                cout<<0<<endl;
                continue;
            }
            memset(dp,-1,sizeof(dp));
            cout << solve(b) - solve(a - 1) << endl;
        }
        return 0;
    }
  • 相关阅读:
    单调栈问题解析
    Linux进程状态切换
    Shell编程小例子
    Linux之shell编程
    树的遍历框架
    你真的会求1-100有多少个素数吗
    java实现LRU算法
    从上到下打印二叉树 III
    从上到下打印二叉树I
    模拟盘电路板调试过程中出现的问题
  • 原文地址:https://www.cnblogs.com/yigexigua/p/4018413.html
Copyright © 2011-2022 走看看