LightOJ 1021 - Painful Bases(dp)

来源:互联网 发布:单片机汇编语言基础 编辑:程序博客网 时间:2024/05/29 06:41

题目链接:LightOJ 1021 - Painful Bases

代码

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 25;const int maxs = 1<<17;typedef long long ll;int base, K;char s[maxn];ll dp[maxs][maxn];int idx(char ch) {    if (ch >= '0' && ch <= '9') return ch - '0';    else return ch - 'A' + 10;}ll solve () {    memset(dp, 0, sizeof(dp));    dp[0][0] = 1;    int n = strlen(s);    for (int i = 0; i < (1<<n); i++) {        for (int j = 0; j < n; j++) if ((i&(1<<j)) == 0) {            for (int k = 0; k < K; k++) {                int v = (k * base + idx(s[j])) % K;                dp[i|(1<<j)][v] += dp[i][k];            }        }    }    return dp[(1<<n)-1][0];}int main () {    int cas;    scanf("%d", &cas);    for (int kcas = 1; kcas <= cas; kcas++) {        scanf("%d%d%s", &base, &K, s);        printf("Case %d: %lld\n", kcas, solve());    }    return 0;}
1 0
原创粉丝点击