cogs 1164. 跑步 1164. 跑步

★   输入文件:runa.in   输出文件:runa.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

路人甲准备跑N (5≤N≤500)圈来锻炼自己的身体,他准备分多次跑完,每次都跑正整数圈,然后休息下再继续跑。为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多。可以假设他刚开始跑了0圈,那么请问他可以有多少种跑完这N圈的方案?

【输入格式】

 一个整数N

【输出格式】

跑完这N圈的方案数

【样例输入】

212

【样例输出】

995645335

思路:f[i][j]表示跑了i圈时,最后一次跑了几圈。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
long long ans,f[501][501];
int main(){
    //freopen("runa.in","r",stdin);
    //freopen("runa.out","w",stdout);
    scanf("%d",&n);
    for(int i=0;i<n+1;i++)    f[i][i]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            for(int k=1;k<min(j,i-j+1);k++)
                f[i][j]+=f[i-j][k];
    for(int i=1;i<n;i++)
        ans+=f[n][i];
    cout<<ans;
}