您的位置:首页 > 大数据 > 人工智能

URAL 1017|Staircases|动态规划

2017-10-03 22:29 507 查看

题目翻译

一个充满好奇心的孩子有N(5≤N≤500)个积木。这些积木可以构建不同的阶梯。阶梯由c(c≥2)列组成,后一列的积木个数要比前一列积木个数要多(否则就不是阶梯了)。

下图包含了N=11和N=5的示例:



你的任务是写一个程序,输入N,输出Q——由正好N个积木搭成的阶梯有多少种。

样例输入

212

样例输出

995645335

题解

考虑dpj表示用了j个方块形成的阶梯有多少种。

那么dpj→dpj+i,其中i表示新增的一列高度为i,即需要i个积木。

#include <cstdio>
long long dp[512];

int main() {
int n, i, j;
scanf("%d", &n);
dp[0] = 1;
for (i = 1; i <= n; ++i)
for (j = n; j >= i; --j) // 倒过来排序类似背包
dp[j] += dp[j - i];

printf("%lld\n", dp
- 1);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: