题目描述
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5
1,5,1
5,1,1
问有多少种不同的分法。
输入格式
n,k (<n≤200 2≤k≤6)
输出格式
1个整数,即不同的分法。
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
int n, k;
int cnt;
void dfs(int x, int cur, int sum)//x表示从第几个数开始
{
if (sum > n)
return;
if (cur == k)
{
if (sum == n)
cnt++;
return;
}
for (int i = x; sum + i * (k - cur) <= n; i++)
{
dfs(i, cur + 1, sum + i);
}
}
int main()
{
scanf("%d%d", &n, &k);
dfs(1, 0, 0);
printf("%d\n", cnt);
return 0;
}
本文探讨了将整数n分成k份的不同分法数量的计算问题,通过深度优先搜索算法进行求解,展示了如何避免重复计数并提供了一个具体的编程实现示例。
549

被折叠的 条评论
为什么被折叠?



