首页 > 其他分享 >P2089 烤鸡

P2089 烤鸡

时间:2024-02-15 20:11:42浏览次数:25  
标签:10 样例 rep Hanke 烤鸡 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\)。

2.题解

2.1 枚举 + 宏

思路

每种调料有[1,3]的情况,我只要嵌套十层循环,即枚举所有的情况和n比较看有没有即可。

代码

#include <bits/stdc++.h>
using namespace std;
#define rep(i) for (int i = 1; i <= 3; i++)
int main() {
    int n, ans = 0;
    stringstream buffer;
    cin >> n;
    rep(a) rep(b) rep(c) rep(d) rep(e) rep(f) rep(g) rep(h) rep(i) rep(j) 
		if (a + b + c + d + e + f + g + h + i + j == n) {
        	ans++;
       		buffer << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << ' ' << f
               << ' ' << g << ' ' << h << ' ' << i << ' ' << j << endl;
    	}
    cout << ans << endl;
    if (ans != 0) cout << buffer.str();
}

时间复杂度

O(1),跟n无关

2.2 优化

思路

主要考虑的是:假设当a,b,c,d的和已经超过了n,那么就没必要再枚举后面的e,f,g,h...了
可以倒着来看,至于rep中的式子怎么来着,看下图最后三段即可知道

代码

标签:10,样例,rep,Hanke,烤鸡,P2089,配料
From: https://www.cnblogs.com/trmbh12/p/18016540

相关文章