zoukankan      html  css  js  c++  java
  • lightoj 1158

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1158

    题解:这题看起来就像是记忆搜索,由于s很少最多就10位所以可以考虑用状压。然后就简单了。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    char s[12];
    int dp[1 << 11][1002] , d , dig[11] , Po[11] , L;
    int dfs(int len , int state , int mod) {
        if(len == 0) {
            if(mod % d == 0) return 1;
            return 0;
        }
        if(dp[state][mod] != -1) return dp[state][mod];
        int ans = 0;
        for(int i = 0 ; i < L ; i++) {
            int g = (1 << i);
            if(g & state) continue;
            ans += dfs(len - 1 , state | g , (mod * 10 + s[i] - '0') % d);
        }
        dp[state][mod] = ans;
        return ans;
    }
    int main() {
        int t;
        int Case = 0;
        scanf("%d" , &t);
        Po[0] = 1;
        for(int i = 1 ; i <= 10 ; i++) Po[i] = Po[i - 1] * i;
        while(t--) {
            scanf("%s %d" , s , &d);
            memset(dp , -1 , sizeof(dp));
            L = strlen(s);
            for(int i = 0 ; i < L ; i++) {
                dig[s[i] - '0']++;
            }
            int tot = 1;
            for(int i = 0 ; i <= 9 ; i++) {
                tot *= Po[dig[i]];
                dig[i] = 0;
            }
            printf("Case %d: %d
    " , ++Case , dfs(L , 0 , 0) / tot);
        }
        return 0;
    }
  • 相关阅读:
    ORBSLAM2的资源
    工程思想
    Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH和ROS_PACKAGE_PATH
    CMkeList文件编写
    SLAM资料
    windows下隐藏文件夹
    Ubuntu16装Flash
    知识管理
    学习纲领
    lsof详解
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7658000.html
Copyright © 2011-2022 走看看