【动态规划】跑步

来源:互联网 发布:淘宝免流量 编辑:程序博客网 时间:2024/05/05 00:12

一、跑步

【问题描述】

      路人甲准备跑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;}


原创粉丝点击