蓝桥杯每日一题:烤鸡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;
}
相关推荐
千谦阙听16 分钟前
C++篇:类和对象(上)
开发语言·c++
_Narcissus_1 小时前
分治&递归
数据结构·c++·笔记·算法·leetcode·递归·分治
明志数科1 小时前
具身智能数据工程全链路解析:从真实产线采集到LeRobot适配
网络·人工智能·算法
小O的算法实验室1 小时前
AAAI-26,Lehmer编码搜索排列空间的理论与实证分析
算法
lch2011_yb1 小时前
CSP-S 2023 密码锁 题解
算法
牛油果子哥q2 小时前
C++ Socket精讲:TCP/UDP套接字、客户端服务端实现、字节序、粘包拆包、简单HTTP服务、网络踩坑与面试全解
网络·c++·tcp/ip
程与留2 小时前
12_常用控件速查(下):QSpinBox、QSlider、QProgressBar、QCheckBox
c++·qt
OPEN-F2 小时前
C++进阶教程:运算符重载与类型转换
java·c++·算法
uoKent2 小时前
c++中的extern关键字
开发语言·c++
牧杉-惊蛰2 小时前
将数组对象根据自定义排列
java·开发语言·算法