题意:有从1^3到21^3一共21种面额的硬币,给一个目标值问有多少种方法。
题解:和之前做的一样,链接
#include <stdio.h>
#include <string.h>
const int N = 10005;
int coin[22], n;
long long f[N][22];
long long dp(int k, int cur) {
if (f[k][cur] != -1)
return f[k][cur];
long long sum = 0;
for (int i = cur; i <= 21 && coin[i] <= k; i++)
sum += dp(k - coin[i], i);
f[k][cur] = sum;
return sum;
}
int main() {
for (int i = 1; i <= 21; i++)
coin[i] = i * i * i;
memset(f, -1, sizeof(f));
for (int i = 1; i < 22; i++)
f[0][i] = 1;
while (scanf("%d", &n) != EOF)
printf("%lld\n", dp(n, 1));
return 0;
}