您的位置:首页 > 大数据 > 人工智能

LightOJ 1021 - Painful Bases(dp)

2015-11-09 20:48 585 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: