蓝桥杯备赛-DFS-数的划分

题目描述

将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5;

1,5,1;

5,1,1.

问有多少种不同的分法。

输入格式

n,k (6<n≤200,2≤k≤6)

输出格式

1 个整数,即不同的分法。

输入输出样例

输入 #1复制

复制代码
7 3

输出 #1复制

复制代码
4

说明/提示

四种分法为:

1,1,5;

1,2,4;

1,3,3;

2,2,3.

cpp 复制代码
#include<iostream>
#include<vector>
int n, k;
int ans=0;
int start=1;//记录前一个数字,保证数列是递增的
int sum = 0;
using namespace std;
void dfs(int x) {
	if (x == k+1) {
		if (sum == n) {
			ans++;
		}//要进行判断,比如n为7时,1,1,1就是不满足的
		return;
	}
	for (int i = start; i <= n-sum; i++) {//i <= n-sum可以进行剪枝,数列是递增的,后面的数字是越来越大的,比如n为7时,1,4再往后面循环1,4,4,和是9超过了7,1,4,5更不用说,所以是会被剪掉的
		start = i;
		sum += i;
		dfs(x + 1);
		sum -= i;//记得返回,回溯后上一层还要继续用
	}
}
int main() {
	cin >> n >> k;
	dfs(1);
	cout << ans;
	return 0;
}
相关推荐
王老师青少年编程27 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX129 分钟前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白30 分钟前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin38 分钟前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
weixin_513449961 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf1 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer
烟锁池塘柳01 小时前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象
Code-keys2 小时前
Android Codec2 Filter 算法模块开发指南
android·算法·音视频·视频编解码
无忧智库2 小时前
低空经济新基建:构建低空飞行大数据中心与行业应用算法工厂的全景式蓝图(WORD)
算法
yolo_guo2 小时前
glog单行 30000 字节限制问题
c++