蓝桥杯每日一题:烤鸡dfs

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

题目:

烤鸡

## 题目背景

猪猪 Hanke 得到了一只鸡。

## 题目描述

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

现在, 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;
}
相关推荐
史迪奇_xxx1 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
我不是QI2 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥2 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
我是华为OD~HR~栗栗呀3 小时前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
oioihoii3 小时前
C++ 中的类型转换:深入理解 static_cast 与 C风格转换的本质区别
java·c语言·c++
明月(Alioo)3 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树3 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
小妖6663 小时前
vscode 怎么运行 c++ 文件
开发语言·c++
lingran__3 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech20254 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn