求个解体思路(百度之星大赛题目)

windnet 2006-06-27 01:28:41
饭团的烦恼
“午餐饭团”是百度内部参与人数最多的民间组织。
同一个部门的、同一所大学的、同一年出生的、使用同一种型号电脑的员工们总是以各种理由组织各种长期的、临时的饭团。


参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们增进感情。
但是,随着百度的员工越来越多,各个饭团的管理变得繁杂起来。特别是为了照顾员工们越来越挑剔的胃,饭团的点菜负责人的压力也越来越大。现在,这个任务就交给“百度之星”了,因为,你将要为所有的百度饭团设计一个自动点菜的算法。


饭团点菜的需求如下:
1.经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近12元越好。
2.菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
3.请谨记,百度饭团在各大餐馆享受8折优惠。


输入要求:
1.输入数据第一行包含三个整数N,M,K(0<N<=16,0<M<=N,0<K<=12),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数;
2.紧接着N行,每行的格式如下:
菜名(长度不超过20个字符) 价格(原价,整数) 是否荤菜(1表示是,0表示否) 是否辛辣(1表示是,0表示否);
3.第N+2行是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。例:
3 2 2
水煮鱼 30 1 1
口水鸡 18 1 1
清炖豆腐 12 0 0
1 1 1 1
样例:in.txt


输出要求:
对于每组测试数据,输出数据包含M+1行,前M行每行包含一个菜名(按菜名在原菜单的顺序排序)。第M+1行是人均消费,结果保留两位小数。例:
口水鸡
清炖豆腐
12.00
样例:out.txt

...全文
877 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
blooney 2006-06-28
  • 打赏
  • 举报
回复
厉害
HashCodeWithJava 2006-06-28
  • 打赏
  • 举报
回复
楼上说得对!
用一般的深度优先搜索算法就可以了。

随便说一下,百度之星的算法题目全部都是考察的搜索算法!
mmmcd 2006-06-27
  • 打赏
  • 举报
回复
最多16个菜;每个菜点或者不点,共有2^16=65536种可能;
情况很少,直接枚举就行

#include <stdio.h>
#include <math.h>
int N,M,K;
char s[16][30];
int pri[16],de[16],a,b,c,d;

bool ans[16],res[16];
double price;

void go(int k,int x,int p){
if(k>N)
return;
if(a<0 || b<0 || c<0 || d<0 || x>M){
return;
}
if(a==0 && b==0 && c==0 && d==0 && x==M){
if(price==-1 || price>fabs(p*0.8/M-12.0)){
for(int i=0;i<N;i++){
res[i]=ans[i];
}
price=p*0.8/M;
}
return;
}
ans[k]=1;
a-=de[k]/2;
b-=de[k]%2;
c-=1-de[k]/2;
d-=1-de[k]%2;
go(k+1,x+1,p+pri[k]);//点第k道菜
ans[k]=0;
a+=de[k]/2;
b+=de[k]%2;
c+=1-de[k]/2;
d+=1-de[k]%2;
go(k+1,x,p);//不点第k道菜
}

void output(){
for(int i=0;i<N;i++){
if(res[i])
printf("%s\n",s[i]);
}
printf("%.2lf\n",price);
}

int main(int argc, char* argv[])
{
FILE *fin=fopen(argv[1],"r");
fscanf(fin,"%d %d %d",&M,&N,&K);
for(i=0;i<N;i++){
fscanf(fin,"%s %d %d %d",s[i],&pri[i],&a,&b);
de[i]=a*2+b;
}
fscanf(fin,"%d %d %d %d",&a,&b,&c,&d);
price=-1;
go(0,0,0);
output();
}

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧