蓝桥杯备考:DFS剪枝之数的划分

这道题和组合型枚举差不多,比如我们从第一个数开始填,到第二个数的时候,21明显是重复了,我们就没必要继续往下递归了,这个叫剪掉等效冗余分支,然后还有就是,比如我们2开始的枝头,222,223,224,225,我们222的时候就已经比5大了,这时候我们再递归算后面的就没用了,我们3开始的时候,344,345肯定是更大的了 所以这条就是我们的可行性剪枝,我们把后面的分支全部剪掉就行了

cpp 复制代码
#include <iostream>
using namespace std;
int n,k;
int path;
int cnt;
void dfs(int pos,int begin)
{
	if(pos == k)
	{
	    if(path == n)
         cnt++;
		 return;	    
	}
	for(int i = begin;i<=n;i++)
	{
		if(path+i*(k-pos)>n) return;
		path+=i;
		dfs(pos+1,i);
		path-=i;
		
	}
}

int main()
{
	cin >> n >> k;
	dfs(0,1);
	
	cout << cnt << endl;
	
	
	
	
	
	
	
	
	return 0;
}
相关推荐
YuTaoShao8 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
zc.ovo2 天前
图论水题日记
算法·深度优先·图论
菜还不练就废了3 天前
7.24 C/C++蓝桥杯 | 排序算法
c语言·c++·蓝桥杯
深兰科技3 天前
绿地集团携手深兰科技推动AI医诊大模型快速落地
人工智能·科技·深度优先·新质生产力·深兰科技·绿地集团·ai医诊大模型
Aurora_wmroy3 天前
算法竞赛备赛——【图论】拓扑排序
数据结构·c++·算法·蓝桥杯·图论
熬了夜的程序员4 天前
【华为机试】547. 省份数量
算法·华为·矩阵·golang·深度优先
YuTaoShao4 天前
【LeetCode 热题 100】78. 子集——(解法二)回溯+选哪个
java·算法·leetcode·深度优先
hans汉斯4 天前
【建模与仿真】基于双流Mobile Vit与通道剪枝的工业过程故障诊断
java·c语言·人工智能·python·算法·机器学习·剪枝
嗨信奥编程4 天前
第十四届蓝桥杯青少Scratch国赛真题——太空大战
青少年编程·蓝桥杯
竹照煜_ysn4 天前
蓝桥杯51单片机
单片机·算法·蓝桥杯·51单片机