2023蓝桥杯省赛真题分糖果 |枚举+DFS

题目链接:

2.分糖果 - 蓝桥云课 (lanqiao.cn)

说明:

虽然这道题并不是很难,思维上也不是特别难,数据小直接暴力就可以得到。但是还是需要注意一些细节,比如DFS的递归终止的条件的处理,当K>7的时候就要返回了,不然会继续向下递归,如果要三个条件同时成立才返回,那就会一直递归下去了,答案也不对。

另外是双重循环的模拟其实会有点难想,一开始还考虑会不会重复,但是仔细一想每个k,i,j的每个合法组合肯定是不会重复的。

代码:

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
const int N=1e3+10;
using namespace std;

int ans=0;
void dfs(int k,int s1,int s2){
	if(k>7){//不能把三个条件写在一起判断,因为>7是返回的条件,三者满足是方案数目加一的条件 
	if(!s1&&!s2)
		ans++;
		return;
	}
	
		for(int i=0;i<=s1;i++){
      //已经大于5时不再继续分
			if(i>5) break;
			for(int j=0;j<=s2;j++){
				if(i+j>5) break;
				if(i+j<2) continue;
			//	if((i+j)>=2&&(i+j)<=5)
				dfs(k+1,s1-i,s2-j);
			}
		}
	
  
}

void solve(){
	dfs(1,9,16);
}

signed main() {
   
   cin.tie(0);
   cout.tie(0);
   solve();
   
   cout<<ans;
    return 0;
}
相关推荐
Vect__11 分钟前
从零实现一个简化版string 类 —— 深入理解std::string的底层设计
c++
hope_wisdom14 分钟前
C/C++数据结构之栈基础
c语言·数据结构·c++··stack
ajassi200021 分钟前
开源 C++ QT Widget 开发(十四)多媒体--录音机
linux·c++·qt·开源
B612 little star king36 分钟前
力扣29. 两数相除题解
java·算法·leetcode
野犬寒鸦37 分钟前
力扣hot100:环形链表(快慢指针法)(141)
java·数据结构·算法·leetcode·面试·职场和发展
时光追逐者41 分钟前
C# 哈希查找算法实操
算法·c#·哈希算法
Jasmine_llq1 小时前
《P3825 [NOI2017] 游戏》
算法·游戏·枚举法·2-sat 算法·tarjan 算法·邻接表存储
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 38: 二叉树的锯齿形层序遍历、二叉树最大宽度
java·linux·运维·算法·leetcode·链表·职场和发展
wangzy19821 小时前
图形基础算法:如何将点与带曲线边的多边形位置关系算法做稳定
算法
艾醒1 小时前
探索大语言模型(LLM):Ollama快速安装部署及使用(含Linux环境下离线安装)
人工智能·深度学习·算法