问题描述
将 2022 拆分成 10 个互不相同的正整数之和, 总共有多少种拆分方法?
注意交换顺序视为同一种方法, 例如 2022=1000+10222022=1000+1022 和 2022=2022= 1022+10001022+1000 就视为同一种方法。
#include <iostream>
using namespace std;
long long dp[11][2222];
int main()
{
dp[0][0]=1;
for(int i=1;i<=2022;i++)
{
for(int j=2022;j>=i;j--)
{
for(int k=10;k>=1;k--)
{
dp[k][j]+=dp[k-1][j-i];
}
}
}
cout<<dp[10][2022];
return 0;
}
#include <iostream>
using namespace std;
long long dp[2222][11][2222];
int main()
{
for(int i=0;i<=2022;i++)
{
dp[i][0][0]=1;
}
for(int i=1;i<=2022;i++)
{
for(int j=1;j<=10;j++)
{
for(int k=1;k<=2022;k++)
{
if(k<i)
{
dp[i][j][k]=dp[i-1][j][k];
}
else
dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k-i];
}
}
}
cout<<dp[2022][10][2022];
return 0;
}