P1806

题目

题目描述:

路人甲准备跑 nn 圈来锻炼自己的身体,他准备分多次(>1\gt1)跑完,每次都跑正整数圈,然后休息下再继续跑。

为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多。

可以假设他刚开始跑了 00 圈,那么请问他可以有多少种跑完这 nn 圈的方案?

输入格式:

一行一个整数,代表 nn

输出格式:

一个整数表示跑完这 nn 圈的方案数。

数据范围与说明:

数据规模与约定

对于 100%100\% 的数据,保证 5n5005\le n\le 500

输入输出样例 #1

输入:

1
212

输出:

1
995645335

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[505];
int main(){
cin>>n;
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=n;j>=i;j--){
dp[j]+=dp[j-i];
}
}
cout<<dp[n]-1;
return 0;
}