1. 程式人生 > >cogs 1164. 跑步

cogs 1164. 跑步

pan sca pen ostream ring 有效 min scanf def

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; }

cogs 1164. 跑步