递推,状态转移方程:dp[j] = dp[j - a[i]]; 依题意a[i] = i^3.
#include<stdio.h>
#include<string.h>
#define MAXD 10005
long long dp[MAXD], a[25];
int N;
int main()
{
for( int i = 1; i <= 21; i ++)
a[i] = i * i * i;
memset( dp, 0, sizeof dp);
dp[0] = 1;
for( int i = 1; i <= 21; i ++)
for( int j = 0; j <= 10000; j ++)
if( j >= a[i])
dp[j] += dp[ j - a[i]];
while( scanf( "%d", &N) == 1)
{
printf( "%lld\n", dp[N]);
}
return 0;
}