蓝桥杯每日一题:烤鸡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;
}
相关推荐
NAGNIP32 分钟前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队1 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
River4163 小时前
Javer 学 c++(十三):引用篇
c++·后端
感哥6 小时前
C++ std::set
c++
Fanxt_Ja6 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下6 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶6 小时前
算法 --- 字符串
算法
博笙困了6 小时前
AcWing学习——差分
c++·算法
NAGNIP6 小时前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP7 小时前
大模型微调框架之LLaMA Factory
算法