题目链接:UVA 11137
这题题用的母函数解法,还是不熟,有一发WA,
AC CODE:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
#define debug 0
#define M(a, b) memset(a, b, sizeof(a))
const int maxn = 10000 + 5;
int n; long long dp[maxn], a[maxn];
void init() {
for (int i = 0; i < 10000; i++)
{
dp[i] = 1; //初始化全用1表示dp[i] = 1;
a[i] = 0;
}
for (int i = 2; i < 25; i++) //10000以内数据量 25^3>10000足够了
{
for (int j = 0; j < 10000; j++)
for (int k = 0; k + j < 10000; k += i * i * i)
{
a[k + j] += dp[j]; //交了一发wa就在这里,母函数用多项式原理,dp[j]表示之前
} //求得j的方案数,k + j是在j的基础上分配i,
for (int i = 1; i < 10000; i++)
{
dp[i] = a[i]; //a[]返0,dp[]赋值
a[i] = 0;
}
}
//return dp[x][y] = ans;
}
int main() {
#if debug
freopen("in.txt", "r", stdin);
#endif //debug
M(dp, 0);
init();
while (~scanf("%d", &n))
{
//int i;
//for (i = 1; i * i * i <= n; i++);
printf("%lld\n", dp[n]);
}
return 0;
}