本题可以想成动态规划的背包问题,用到了不同的状态转移方程,下面附上代码
#include <iostream>
using namespace std;
long long n, ans[501];
int main() {
cin >> n;
ans[0] = 1;//第一次跑了0圈
for (int i = 1; i <= n; i++)
{
for (int j = n; j >= i; j--)
{
ans[j] += ans[j - i];//第j圈由第i-j圈衍变而来
}
}
cout << ans[n] - 1;注意题意,不能一次跑完,所以减去一次跑完的那次
return 0;
}