题目的意思就是有21种面值的硬币,面值分别是1,8,27....一直到21的三次方9261.
然后问组成目标面值有几种办法.
这题和uva147是一样的题,直接看那题的题解.
http://blog.csdn.net/yeyeyeguoguo/article/details/40343123
AC代码:
#include<stdio.h>
#include<string.h>
#define ll long long
const int N = 10005;
int coin[22];
ll f[N][22];
int n;
ll dp(int pos , int up) {
if(f[pos][up]!= -1)
return f[pos][up];
ll sum = 0;
for (int i = up ; coin[i] <= pos && i <= 21 ; i++) {
sum += dp(pos - coin[i] , i);
}
f[pos][up] = sum;
return sum;
}
int main () {
memset(f , -1 ,sizeof(f));
for(int i = 1 ; i <= 21 ;i++) {
coin[i] = i * i * i;
}
for(int i = 1 ; i <= 21 ;i++) {
f[0][i] = 1;
}
while(scanf("%d",&n) != EOF) {
printf("%lld\n" , dp(n , 1));
}
}