蓝桥杯每日一题:烤鸡dfs

这道题考察了dfs的应用,题干十分有趣,思考过程对以后类似题目也有很强的参考性,一起来学习吧!

题目:

烤鸡

## 题目背景

猪猪 Hanke 得到了一只鸡。

## 题目描述

猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 种配料(芥末、孜然等),每种配料可以放 1 到 3 克,任意烤鸡的美味程度为所有配料质量之和。

现在, Hanke 想要知道,如果给你一个美味程度 n ,请输出这 10 种配料的所有搭配方案。

## 输入格式

一个正整数 n,表示美味程度。

## 输出格式

第一行,方案总数。

第二行至结束,10 个数,表示每种配料所放的质量,按字典序排列。

如果没有符合要求的方法,就只要在第一行输出一个 0。

样例 #1

样例输入 #1

```

11

```

样例输出 #1

```

1 1 1 1 1 1 1 1 1 2

1 1 1 1 1 1 1 1 2 1

1 1 1 1 1 1 1 2 1 1

1 1 1 1 1 1 2 1 1 1

1 1 1 1 1 2 1 1 1 1

1 1 1 1 2 1 1 1 1 1

1 1 1 2 1 1 1 1 1 1

1 1 2 1 1 1 1 1 1 1

1 2 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

10

提示

对于 100\\% 的数据,n \\leq 5000。

答案

cpp 复制代码
#include<iostream>
using namespace std;
//烤鸡
const int N=20;
int arr[N];//每份调料的克数
bool st[N];//是否加过该配料 
int sum,n;
int sum1(int sum);
int res =0;//方案数 
//x表示枚举到了哪一位,sum表示当前已经选了的总数控i昂 
void dfs(int x,int sum)
{
	if(x>10)
	{
		if(sum>n) return ;
		if(x>10)
		{
			if(sum==n)
			{
			res++;
			for(int i=1;i<=10;i++)
			{
				cout<<arr[i];
			}
			cout<<endl;
			//return ;
		}
		//cout<<endl
		return ;
		}
	}
	for(int i=1;i<=3;i++)
	{
		arr[x]=i;
		dfs(x+1,sum+i);
		arr[x]=0;//是x,不是i 
	    
	}
}

int main()
{
	cin>>n;
	dfs(1,0);
	cout<<res;
	return 0;
}
相关推荐
C++ 老炮儿的技术栈几秒前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
小黄人软件2 分钟前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
有毒的教程13 分钟前
Dev-C++ 避免爆栈(Stack Overflow)完整方案
c++·算法·深度优先
程序员老陆14 分钟前
从汇编层面理解 C++ 多线程
开发语言·c++·程序设计
在所不辞兄30 分钟前
刚性问题误差容限设置技巧
深度学习·神经网络·算法·机器学习
IOT-Power30 分钟前
模板方法 + 策略模式
开发语言·c++
啊啊啊啊啊!!!!33 分钟前
unordered_map和unordered_set的使用
算法
java_nnnn1 小时前
LeetCode刷题双指针(快乐数+盛最多水的容器)Java
算法·leetcode·职场和发展
fpcc9 小时前
c++编程实践—堆和栈越界调试
c++
yi0119 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表