一、跑步
【问题描述】
路人甲准备跑N (5≤N≤500)圈来锻炼自己的身体,他准备分多次跑完,每次都跑正整
数圈,然后休息下再继续跑。为了有效地提高自己的体能,他决定每次跑的圈数都必须比
上次跑的多。可以假设他刚开始跑了0圈,那么请问他可以有多少种跑完这N圈的方案?
【输入】
一个整数N
【输出】
跑完这N圈的方案数
【样例输入】
212
【样例输出】
995645335
动态规划。很简单
f[i][j] 表示 跑i圈,最后一次跑j圈,总共方法数
f[i][j] = sigma(f[i-j][k]);
#include <cstdio>
#include <iostream>
typedef long long ll;
ll f[510][510];
int main()
{
freopen("run.in","r",stdin);
freopen("run.out","w",stdout);
long n;
scanf("%ld",&n);
for (long i=0;i<n+1;i++)
{
f[i][i] = 1;
}
for (long i=1;i<n+1;i++)
{
for (long j=1;j<i+1;j++)
{
for (long k=1;k<j&&k<=i-j;k++)
{
f[i][j] += f[i-j][k];
}
}
}
ll ans = 0;
for (long i=1;i<n;i++)
{
ans += f[n][i];
}
std::cout << ans;
return 0;
}