华师一附中OI组
标题:
P2089 烤鸡
[打印本页]
作者:
admin
时间:
2018-5-13 16:42
标题:
P2089 烤鸡
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
作者:
吴语林
时间:
2018-5-14 06:54
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int n,cun[15],shu[100000][15],all=0;
void dfs(int cen,int x)
{
if(cen==10)
{
if(x==0)
{
all++;
for(int i=1;i<=10;i++) shu[all][i]=cun[i];
}
return;
}
for(int i=1;i<=x-9+cen&&i<=3;i++)
cun[cen+1]=i,dfs(cen+1,x-i);
}
int main()
{
scanf("%d",&n);
if(n>=10&&n<=30)
dfs(0,n);
printf("%d\n",all);
for(int i=1;i<=all;i++)
{
for(int j=1;j<=10;j++)
printf("%d ",shu[i][j]);
printf("\n");
}
return 0;
}
复制代码
作者:
admin
时间:
2018-5-14 12:18
第19行这样的句子千万小心,到底是先执行左边的还是先执行右边的呢?
为什么你们好像都不喜欢用 if else 却都喜欢程序之间去renturn 呢?
作者:
吴语林
时间:
2018-5-14 12:48
标题:
代码不知为什么上传不了,改正了
本帖最后由 吴语林 于 2018-5-14 12:54 编辑
[attach]66[/attach]
作者:
倚窗倾听风吹雨
时间:
2018-7-7 14:41
直接暴力枚举,大概两万多次循环就搞定了,不会超时;
#include<iostream>
using namespace std;
int i,j,k,l,m,n,o,p,q,r,s;
int a[60000][11],ans;
int main()
{
cin>>s;
for(i=1; i<=3; i++)
for(j=1; j<=3; j++)
for(k=1; k<=3; k++)
for(l=1; l<=3; l++)
for(m=1; m<=3; m++)
for(n=1; n<=3; n++)
for(o=1; o<=3; o++)
for(p=1; p<=3; p++)
for(q=1; q<=3; q++)
{
r=s-i-j-k-l-m-n-p-o-q;
if(1<=r && r<=3)
{
ans++;
a[ans][1]=i;
a[ans][2]=j;
a[ans][3]=k;
a[ans][4]=l;
a[ans][5]=m;
a[ans][6]=n;
a[ans][7]=o;
a[ans][8]=p;
a[ans][9]=q;
a[ans][10]=r;
}
}
cout<<ans<<endl;
for(i=1; i<=ans; i++)
{
for(j=1; j<=10; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
复制代码
作者:
universehyf
时间:
2018-7-8 15:17
标题:
大约有五万多次哟
本帖最后由 universehyf 于 2018-7-8 15:18 编辑
大约有五万多次哟
复制代码
作者:
universehyf
时间:
2018-7-8 15:19
#include<iostream>
using namespace std;
const int m=60000;
int a[m][10],c[10];
int s,i,ss,j,cc,k;
bool b[m];
int main()
{
cin>>s;
for(c[0]=1;c[0]<=3;c[0]++)///连续的for可用递归优化代码长度
for(c[1]=1;c[1]<=3;c[1]++)
for(c[2]=1;c[2]<=3;c[2]++)
for(c[3]=1;c[3]<=3;c[3]++)
for(c[4]=1;c[4]<=3;c[4]++)
for(c[5]=1;c[5]<=3;c[5]++)
for(c[6]=1;c[6]<=3;c[6]++)
for(c[7]=1;c[7]<=3;c[7]++)
for(c[8]=1;c[8]<=3;c[8]++)
for(c[9]=1;c[9]<=3;c[9]++)
{
ss=0;
for(j=0;j<=9;j++) ss=ss+c[j];
if(ss==s){b[i]=1;cc++;}
for(j=0;j<=9;j++) a[i][j]=c[j];
i++;
}
cout<<cc<<endl;
for(j=0;j<=i-1;j++)
if(b[j])
{
for(k=0;k<=9;k++) cout<<a[j][k]<<" ";
cout<<endl;
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2