华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1563|回复: 6
打印 上一主题 下一主题

P2089 烤鸡

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-5-13 16:42:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P2089
题目描述
猪猪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
回复

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
沙发
发表于 2018-5-14 06:54:26 | 只看该作者
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. using namespace std;
  6. int n,cun[15],shu[100000][15],all=0;
  7. void dfs(int cen,int x)
  8. {
  9.         if(cen==10)
  10.         {
  11.                 if(x==0)
  12.                 {
  13.                         all++;
  14.                         for(int i=1;i<=10;i++) shu[all][i]=cun[i];
  15.                 }
  16.                 return;
  17.         }
  18.         for(int i=1;i<=x-9+cen&&i<=3;i++)
  19.                 cun[cen+1]=i,dfs(cen+1,x-i);
  20. }
  21. int main()
  22. {
  23.         scanf("%d",&n);
  24.         if(n>=10&&n<=30)
  25.                 dfs(0,n);
  26.         printf("%d\n",all);
  27.         for(int i=1;i<=all;i++)
  28.         {
  29.                 for(int j=1;j<=10;j++)
  30.                         printf("%d ",shu[i][j]);
  31.                 printf("\n");
  32.         }
  33.         return 0;
  34. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
板凳
 楼主| 发表于 2018-5-14 12:18:28 | 只看该作者
第19行这样的句子千万小心,到底是先执行左边的还是先执行右边的呢?
为什么你们好像都不喜欢用 if  else 却都喜欢程序之间去renturn 呢?
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
地板
发表于 2018-5-14 12:48:04 | 只看该作者

代码不知为什么上传不了,改正了

本帖最后由 吴语林 于 2018-5-14 12:54 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
5#
发表于 2018-7-7 14:41:03 | 只看该作者
直接暴力枚举,大概两万多次循环就搞定了,不会超时;
  1. #include<iostream>
  2. using namespace std;
  3. int i,j,k,l,m,n,o,p,q,r,s;
  4. int a[60000][11],ans;
  5. int main()
  6. {
  7.     cin>>s;
  8.     for(i=1; i<=3; i++)
  9.     for(j=1; j<=3; j++)
  10.     for(k=1; k<=3; k++)
  11.     for(l=1; l<=3; l++)
  12.     for(m=1; m<=3; m++)
  13.     for(n=1; n<=3; n++)
  14.     for(o=1; o<=3; o++)
  15.     for(p=1; p<=3; p++)
  16.     for(q=1; q<=3; q++)
  17.     {
  18.         r=s-i-j-k-l-m-n-p-o-q;
  19.         if(1<=r && r<=3)
  20.         {
  21.             ans++;
  22.             a[ans][1]=i;
  23.             a[ans][2]=j;
  24.             a[ans][3]=k;
  25.             a[ans][4]=l;
  26.             a[ans][5]=m;
  27.             a[ans][6]=n;
  28.             a[ans][7]=o;
  29.             a[ans][8]=p;
  30.             a[ans][9]=q;
  31.             a[ans][10]=r;
  32.         }
  33.     }
  34.     cout<<ans<<endl;
  35.     for(i=1; i<=ans; i++)
  36.     {
  37.         for(j=1; j<=10; j++)
  38.             cout<<a[i][j]<<" ";
  39.         cout<<endl;
  40.     }
  41. }
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
6#
发表于 2018-7-8 15:17:02 | 只看该作者

大约有五万多次哟

本帖最后由 universehyf 于 2018-7-8 15:18 编辑
  1. 大约有五万多次哟
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
7#
发表于 2018-7-8 15:19:22 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. const int m=60000;
  4. int a[m][10],c[10];
  5. int s,i,ss,j,cc,k;
  6. bool b[m];
  7. int main()
  8. {
  9.     cin>>s;
  10.     for(c[0]=1;c[0]<=3;c[0]++)///连续的for可用递归优化代码长度
  11.     for(c[1]=1;c[1]<=3;c[1]++)
  12.     for(c[2]=1;c[2]<=3;c[2]++)
  13.     for(c[3]=1;c[3]<=3;c[3]++)
  14.     for(c[4]=1;c[4]<=3;c[4]++)
  15.     for(c[5]=1;c[5]<=3;c[5]++)
  16.     for(c[6]=1;c[6]<=3;c[6]++)
  17.     for(c[7]=1;c[7]<=3;c[7]++)
  18.     for(c[8]=1;c[8]<=3;c[8]++)
  19.     for(c[9]=1;c[9]<=3;c[9]++)
  20.     {
  21.         ss=0;
  22.         for(j=0;j<=9;j++) ss=ss+c[j];
  23.         if(ss==s){b[i]=1;cc++;}
  24.         for(j=0;j<=9;j++) a[i][j]=c[j];
  25.         i++;
  26.     }
  27.     cout<<cc<<endl;
  28.     for(j=0;j<=i-1;j++)
  29.         if(b[j])
  30.         {
  31.             for(k=0;k<=9;k++) cout<<a[j][k]<<" ";
  32.             cout<<endl;
  33.         }
  34.     return 0;
  35. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 12:49 , Processed in 0.162078 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表