题目:

分析:


代码:
#include<stdio.h>
#include<string.h>
int main()
{
long long f[501][501];//f[i, j]表示i块积木堆成最高一排不超过j块积木的方案数
memset(f, 0, sizeof(f));
for(int i=0; i<501; i++)
f[0][i] = 1; //f[3, 3]=f[3 ,2]+f[0, 2],f[0,2]就表示由3块砖竖起来的这种情况
for (int i = 1; i < 501; i++) //公式递推
for (int j = 1; j < 501; j++)
if(i>=j)
f[i][j] = f[i][j - 1] + f[i - j][j - 1];
else
f[i][j] = f[i][j - 1];
int n;
while (scanf("%d", &n), n)
printf("%lld\n", f[n][n] - 1);
return 0;
}
本文介绍了一种通过动态规划解决积木堆叠问题的方法,使用C语言实现了一个程序,该程序可以计算出用特定数量的积木可以堆叠的不同方案数。通过对二维数组进行递归填充来达到目的。
195

被折叠的 条评论
为什么被折叠?



