题目描述
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
{1,1,5};{1,5,1};{5,1,1};
问有多少种不同的分法。 输出一个整数,即不同的分法。
输入
两个整数n,k(6<n≤200,2≤k≤6),中间用单个空格隔开。
输出
一个整数,即不同的分法。
样例输入
7 3
样例输出
4
提示
四种分法为:{1,1,5};{1,2,4};{1,3,3};{2,2,3}。
代码如下:
#include <iostream>
using namespace std;
int dp[210][10];int main() {int n, k;cin >> n >> k;for (int i = 1; i <= n; i++)for (int j = 1; j <= k; j++) {if (j == i || j == 1)dp[i][j] = 1;else if (i >= j)dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j];else dp[i][j] = 0;}cout << dp[n][k] << endl;return 0;
}