$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
设 $f_i$ 为 $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;
}