题目链接:https://nanti.jisuanke.com/t/41422
解题思路:
刚开始看到这道题目的时候,我想可不可以通过得到最大的数之后,看是不是规律,找了几分钟后的规律后没找到,然后发现这道题目似乎可以直接用dp来写,分析极限时间复杂度:1e5 + 1.92e8,接近2s,所以是不会超时的(因为我的实际时间复杂度一定是远小于这个极限时间复杂度的)
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1e6 + 5;
int a[maxn], f[15][maxn];
int main(void) {
// freopen("in.txt", "r", stdin);
for(int k = 2; k <= 10; k ++) {
for(int i = 1; i <= 1000000; i ++) {
int tmp = 0, permt = i;
while(permt) {
tmp += permt % k;
permt /= k;
}
a[i] = tmp;
}
for(int i = 1; i <= 1000000; i ++)
f[k][i] = f[k][i - 1] + a[i];
}
int T, n, b, cnt = 1;
scanf("%d", &T);
while(T --) {
scanf("%d%d", &n, &b);
printf("Case #%d: %d\n", cnt ++, f[b][n]);
}
// fclose(stdin);
return 0;
}