2021.06.02数的划分
题目描述
将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5;
1,5,1;
5,1,1.
问有多少种不同的分法。
输入格式
n,k
输出格式
1 个整数,即不同的分法。
样例输入
7 3
样例输出
4
数据规模和约定
6<n≤200,2≤k≤6
思路
Dfs
代码
class Solution{
int res = 0;
void test() {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt(),k = cin.nextInt();
dfs(0,n,k);
System.out.println(res);
}
void dfs(int cur, int lef, int lefCnt) {
if(lefCnt == 0 && lef == 0) res++;
if(lef <= 0 || lefCnt <= 0 || lef-cur*lefCnt < 0 ) return;//剪枝
for(int i = Math.max(cur, 1); i <= lef; i++)
if(lef-i < 0) break;//剪枝
else dfs(i, lef-i, lefCnt-1);
}
}
本文探讨了将整数n分成k份的不同方案数量的计算问题,并提供了一种基于深度优先搜索(DFS)的解决方案。具体示例展示了如何通过递归方法剪枝以提高效率。
3033

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



