蓝桥杯备考: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;
}
相关推荐
ChoSeitaku4 小时前
NO.79十六届蓝桥杯备战|数据结构-扩展域并查集-带权并查集|团伙|食物链|银河英雄传说(C++)
数据结构·c++·蓝桥杯
随便昵称4 小时前
蓝桥杯真题——好数、R格式
蓝桥杯
好好学习^按时吃饭6 小时前
蓝桥杯2022年第十三届省赛真题-统计子矩阵
算法·蓝桥杯
爱coding的橙子6 小时前
蓝桥杯备赛 Day 20 树基础
数据结构·c++·算法·蓝桥杯·深度优先
F_lander6 小时前
蓝桥杯冲刺题单--二分
java·算法·蓝桥杯
谦川9 小时前
蓝桥杯 完全平方数 刷题笔记
笔记·职场和发展·蓝桥杯
Vaclee9 小时前
蓝桥杯—数字接龙(dfs+减枝)
算法·蓝桥杯·深度优先
Word码10 小时前
[蓝桥杯] 挖矿(C&C++双语版)
c语言·数据结构·c++·笔记·算法·职场和发展·蓝桥杯
神里流~霜灭11 小时前
蓝桥备赛指南(14):树的直径与重心
c语言·数据结构·c++·算法·二叉树·深度优先·递归
Jasmin Tin Wei11 小时前
蓝桥杯 web 新鲜的蔬菜(css3)
前端·蓝桥杯·css3