洛谷p2089 烤鸡 --- (两种方法 + 详细注释 + C++实现 )
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了洛谷p2089 烤鸡 --- (两种方法 + 详细注释 + C++实现 ),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2773字,纯文字阅读大概需要4分钟。
内容图文
题目描述
猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可以放1—3克,任意烤鸡的美味程度为所有配料质量之和
现在,Hanke想要知道,如果给你一个美味程度,请输出这10种配料的所有搭配方案
输入格式
一行,n<=5000
输出格式
第一行,方案总数
第二行至结束,10个数,表示每种配料所放的质量
按字典序排列。
如果没有符合要求的方法,就只要在第一行输出一个“0”
输入输出样例
输入 #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
说明/提示
枚举
//本题提示说枚举,其实也可搜索(核心也是枚举)
//由于要求先输出种类数,再输出每种情况,所以要把每种情况先储存起来,所以二维数组a储存结果,操作一维数组temp
#include<iostream>
using namespace std;
int n, cnt, a[10000][10], temp[10];
void dfs(int step, int sum) { //step为第几种调料,sum目前的配料之和
int i;
if (step == 10) { //当10种调料都分析完了
if (sum == n) { //如果配料之和等于输入值
for (i = 0; i < 10; i++)
a[cnt][i] = temp[i]; //把temp数组的元素都转移到二维数组a里面
cnt++; //cnt为满足的情况数
}
return;
}
for (i = 1; i < 4; i++) { //每种调料有三种情况,分别为1,2,3
temp[step] = i; //第step种调料的配料为i
dfs(step + 1, sum + i); //递归,对下一种调料做同样的分析
}
}
int main() {
int i, j;
cin >> n;
dfs(0, 0);
if (!cnt) //如果一种情况都没有
cout << "0";
else { //有情况
cout << cnt << endl; //先输出种类数
for (i = 0; i < cnt; i++) { //输出二维数组a
for (j = 0; j < 10; j++)
cout << a[i][j] << " ";
cout << endl; //输出每种情况后换行
}
}
return 0;
}
//后来看到有的大佬暴力枚举也AC了,在此引用一下他们的代码:
?
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d,e,f,g,h,i,j,in,x=0;
cin>>in;
for (a=1;a<=3;a++)
{
for (b=1;b<=3;b++)
{
for (c=1;c<=3;c++)
{
for (d=1;d<=3;d++)
{
for (e=1;e<=3;e++)
{
for (f=1;f<=3;f++)
{
for (g=1;g<=3;g++)
{
for(h=1;h<=3;h++)
{
for (i=1;i<=3;i++)
{
for (j=1;j<=3;j++)
{
if (a+b+c+d+e+f+g+h+i+j==in)
{
x++;
}
}
}
}
}
}
}
}
}
}
}
cout<<x<<endl;
for (a=1;a<=3;a++)
{
for (b=1;b<=3;b++)
{
for (c=1;c<=3;c++)
{
for (d=1;d<=3;d++)
{
for (e=1;e<=3;e++)
{
for (f=1;f<=3;f++)
{
for (g=1;g<=3;g++)
{
for(h=1;h<=3;h++)
{
for (i=1;i<=3;i++)
{
for (j=1;j<=3;j++)
{
if (a+b+c+d+e+f+g+h+i+j==in)
{
cout<<a<<" ";
cout<<b<<" ";
cout<<c<<" ";
cout<<d<<" ";
cout<<e<<" ";
cout<<f<<" ";
cout<<g<<" ";
cout<<h<<" ";
cout<<i<<" ";
cout<<j<<endl;
}
}
}
}
}
}
}
}
}
}
}
}
?
呆码农梦中识bug,程序员哭求加工资 发布了47 篇原创文章 · 获赞 46 · 访问量 3243 私信 关注
内容总结
以上是互联网集市为您收集整理的洛谷p2089 烤鸡 --- (两种方法 + 详细注释 + C++实现 )全部内容,希望文章能够帮你解决洛谷p2089 烤鸡 --- (两种方法 + 详细注释 + C++实现 )所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。