首页 > 其他分享 >烤鸡

烤鸡

时间:2024-05-21 14:08:26浏览次数:15  
标签:10 int Hanke 烤鸡 include 配料

传送锚点:https://www.luogu.com.cn/problem/P2089

题目背景

猪猪 Hanke 得到了一只鸡。

题目描述

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

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

输入格式

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

输出格式

第一行,方案总数。

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

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

样例 #1

样例输入 #1

11

样例输出 #1

10
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

提示

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

思路

code

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
const int maxn =60000;
int mem[maxn][11];//记录方案可能性 59055大概接近于3的10次方 
int nums[11];//存储10种调料放几克
int res = 0;//记录方案数
void dfs(int x,int cnt) {//遍历的坐标
	if(cnt > n) return;
	if (x > 10) {//质量和超过题目所给,剪枝
		if (cnt == n) {
			res ++;
			for (int i = 1; i <= 10; i++) { 
				mem[res][i] = nums[i];
			}
		}
		return;
	}
	for (int i = 1; i <= 3; i++) {
		nums[x] = i;
		dfs(x + 1, cnt + i);
		nums[x] = 0;
	}

}
int main()
{
	cin >> n;
	dfs(1, 0);
	cout << res << endl;
	for (int i = 1; i <= res; i++) {
		for (int j = 1; j <= 10; j++) {
			cout << mem[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

标签:10,int,Hanke,烤鸡,include,配料
From: https://www.cnblogs.com/6Luffy6/p/18203874

相关文章

  • P2089 烤鸡
    题目链接:不要怕太暴力而不敢打()第一时间想到的其实是深搜,每个位置都有三种选择,考虑完当前位置后再顺次考虑接下来的位置。后来仔细一想,这不就是暴力枚举么!直接十重循环,每次看各个位置上的数之和是否等于\(n\),时间复杂度为\(3^{10}\)约为\(5e^4\),因此不会超时。#include<cs......
  • P2089 烤鸡
    烤鸡题目背景猪猪Hanke得到了一只鸡。题目描述猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有\(10\)种配料(芥末、孜然等),每种配料可以放\(1\)到\(3\)克,任意烤鸡的美味程度为所有配料质量之和。现在,Hanke想要知道,如果给你一个......