问题描述
将 2022 拆分成 10 个互不相同的正整数之和, 总共有多少种拆分方法?
注意交换顺序视为同一种方法, 例如 2022=1000+1022 和 2022= 1022+1000 就视为同一种方法。
#include<iostream>
using namespace std;
long long f[15][2500]; //f[k][j]:用 k 个不同的数凑出 j 的方案数
int main()
{
f[0][0] = 1; //初始化:0 个数凑 0 的方案数为 1
//遍历所有可能的数(物品)
for(int i=1; i<=2022; ++i)
{
//逆序遍历背包容量
for(int j=2022; j>=i; j--)
{
for(int k=10; k>=1; k--)
{
f[k][j] += f[k-1][j-i];
}
}
}
cout<<f[10][2022];
return 0;
}