设 fi 为 i 的拆分方案数。
则这题相当于一个完全背包,直接转移即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 1015, mod = 1e9 + 7;
int n, f[N];
int main() {
scanf("%d", &n);
f[0] = 1;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++) (f[j] += f[j - i]) %= mod;
printf("%d\n", f[n]);
return 0;
}