蓝桥杯每日一题:烤鸡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;
}
相关推荐
Blue.ztl34 分钟前
DP刷题练习(二)
算法·cpp
青山是哪个青山42 分钟前
位运,模拟,分治,BFS,栈和哈希表
算法·散列表·宽度优先
Zephyrtoria3 小时前
区间合并:区间合并问题
java·开发语言·数据结构·算法
柏箱5 小时前
容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程。
算法·bfs
Aderversa5 小时前
C++开源协程库async_simple有栈协程源码分析
c++·协程
uyeonashi5 小时前
【QT】窗口详解
开发语言·c++·qt·学习
Hello eveybody6 小时前
C++介绍整数二分与实数二分
开发语言·数据结构·c++·算法
空白木各7 小时前
evo工具
c++
编码小笨猪7 小时前
浅谈Linux中一次系统调用的执行过程
linux·服务器·c++
Mallow Flowers8 小时前
Python训练营-Day31-文件的拆分和使用
开发语言·人工智能·python·算法·机器学习