P2089 烤鸡

烤鸡

题目背景

猪猪 Hanke 得到了一只鸡。

题目描述

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

现在, 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% 的数据,n5000

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中的式子怎么来着,看下图最后三段即可知道

代码

posted @   DawnTraveler  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示