Description
将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n = 7,k = 3,下面三种分法被认为是相同的。1 , 1 , 5
1 , 5 , 1
5 , 1 , 1
问有多少种不同的分法。
Input
n,k (6 < n ≤ 200,2 ≤ k ≤ 6)
Output
1 个整数,即不同的分法。
Sample Input
7 3
Sample Output
4
Hint 对于样例的输入输出
四种分法为:
1 , 1 , 5
1 , 2 , 4
1 , 3 , 3
2 , 2 , 3
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
int dp[205][7];
memset(dp, 0, sizeof(dp)); //初始化为零
dp[0][0] = 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= k; j++)
{
if (j <= i)
{
dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j];
}
}
}
cout << dp[n][k];
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int dp[220][11];
int main()
{
int n, k;
memset(dp, 0, sizeof(dp));
for(int i = 0; i <= 200; i ++) dp[i][1] = 1;
while(scanf("%d%d", &n, &k) != EOF)
{
for(int i = 1; i <= n; i ++)
for(int j = 2; j <= k && j <= i; j ++)
dp[i][j] = dp[i - j][j] + dp[i - 1][j - 1];
printf("%d\n", dp[n][k]);
}
return 0;
}