您的位置:首页 > 其它

UVa11137 Ingenuous Cubrency

2012-11-19 23:47 393 查看
  原题传送:http://uva.onlinejudge.org/external/111/11137.html

  递推,动态规划。

  d[i][j]表示使用不超过i的 i 的整数的立方,累加和为 j 的方案数。

  则有状态转移方程:

    d[i][j] = d[i - 1][j] + d[i][j - i3]。

  初始条件d[0][0] = 1;

View Code

#include <stdio.h>
#include <string.h>
typedef  long long LL;

const int maxi = 21;
const int maxn = 10000;

LL d[maxi + 2][maxn + 5];

void init()
{
memset(d, 0, sizeof d);
d[0][0] = 1;
for(int i = 1; i <= maxi; i ++)
{
for(int j = 0; j <= maxn; j ++)
{
if(j - i * i * i >= 0)
d[i][j] = d[i - 1][j] + d[i][j - i * i * i];
else
d[i][j] = d[i - 1][j];
}
}
}

int main()
{
init();
int n;
while(scanf("%d", &n) == 1)
{
printf("%lld\n", d[maxi]
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: