文章目录
问题:给出2个整数n和k,请问如果将n分为k份,每份均不能为0,一共有多少种不同的分发。注:仅顺序不同视为同一种分发。
- DP[i][j]
条件:n>=k;平均每份要给1。剩余n-k个
则对于后面的排列:可以将其全部分到一份当中(dp[i-j][1]),也可以分到两份中(dp[i-j][2]),…,也可以分到 j 份中(dp[i-j][j]),而每一种分法都是不相同的,所以可以将其全部加起来,和即为dp[i][j]。【顺序不管】
d[n][k]=d[n-k][1]+d[n-k][2]+d[n-k][3]+…+d[n-k][k]
d[n-1][k-1]=d[(n-1)-(k-1)][1]+…+d[(n-1)-(k-1)][k-1];
得到
d[n][k]=d[n-k][k]+d[n-1][k-1];
int Array[MAX_size][MAX_size];
memset(Array, 0, sizeof(Array));
int n=0,k=0;
//输入两个数据
cin >> n >> k;
if (n < k) return -1;
//对第一个进行初始行动,0,0是一种
Array[0][0] = 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= k; j++)
{
if (i >= j)
Array[i][j] = Array[i - j][j] + Array[i - 1][j - 1];
}
}
cout << Array[n][k] << endl;
参考资料
https://blog.csdn.net/elma_tww/article/details/86538836