使用背包问题的思想,$f[i][j]$表示前$i$种物品组成容量为$j$的背包一共会有多少方案数。
C++ 代码
#include<iostream>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll f[1010][1010];
int main()
{
int n;
cin >> n;
for (int i = 0; i < 1010; i++)
f[i][0] = 1;
for(int i=1;i<=n;i++)
for (int j = 0; j <= n; j++)
{
if (j <i)
f[i][j] = f[i - 1][j];
else {
f[i][j] = (f[i - 1][j] + f[i][j - i]) % mod;
}
}
cout << f[n][n] << endl;
return 0;
}