QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12144|回复: 1
打印 上一主题 下一主题

2006 年百度之星程序设计大赛初赛题目 1

[复制链接]
字体大小: 正常 放大

1341

主题

738

听众

2万

积分

数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    跳转到指定楼层
    1#
    发表于 2010-5-6 18:56 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    饭团的烦恼 " O0 @& u# m4 e; W9 b

    & B/ E- @" w: ^! Y“午餐饭团“是百度内部参与人数最多的民间组织。
    6 E- `9 A# z$ Z, U9 R4 B. q/ k
    ' d9 K& g; m5 O( k% [% G8 q同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    0 c+ ?( J" J  P! G/ i# ~- z
    6 b* |  D. N/ U参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    : U: V1 C; h0 |9 E9 @& m" S
    " O" O, U; Y( K! B但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 ( c* X! ^0 }4 x5 u

    2 ?& E) s! h5 b6 [9 |, @饭团点菜的需求如下:
    6 a' m' r8 Q6 t9 J$ {* p8 Q" A. V* ^; V/ [$ \! Y
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 4 d/ h4 b* t8 F% ^; w
    ; H8 p# X2 i* x$ c
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 6 e8 {' m* H/ U8 y- x  v' f1 j+ m
    , _5 X6 T, M1 f8 {0 L) h
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 7 R2 @( Z" m) l' n  Y: d) L

    * t5 y$ k) J/ M* \: N输入数据描述如下:
    $ D1 O) g5 k$ O+ t8 J! F
    5 n1 B  L. u* ~( I% s, q第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    3 \! y! @) X, u) v; N( _. m
    ! V. F3 X0 k+ @2 F紧接着 N 行,每行的格式如下: % q2 v0 {; w( d3 ^
    7 b  A" \7 H# T7 @7 U6 Y; l' L
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 3 b* ~9 T$ X, ]/ N

    ! h3 c3 E! J0 o% u! L例: 3 q% N1 l& M7 B  f, y

    1 u# [! B! r# [4 _3 K8 a0 f" N; X水煮鱼 30 1 1
    ! O) z& k) C3 ]* Z! |* h+ H' `" A# y. I/ f& Q3 U% Y
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    9 P# j5 ?4 N$ J$ M) [% f8 c+ p7 x
    8 q$ X! D6 E+ ~输出数据:
    / t/ {  l, l* M3 j/ [# S. \  Y$ |  {2 O) Q7 H4 L  p
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 9 [7 Q" i% C; T* }" ]4 E5 F
    / w7 I1 W2 Z6 s: J" D$ S
    说明:
    9 ^6 K5 Y: w, l3 A) m# j% \2 B" T# Y4 A" v* {7 ]) u  {9 l1 i- L" Z; C
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    - e9 j# T& j* L0 ?
    . \, c5 g9 `0 E( F2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    , t( b  x. B" s- B4 S
    7 D/ w0 D0 o3 b5 G+ |输入样例


    1 g& v7 f/ j# `. f6 M3 2 2 4 p- s' x7 w3 |4 I4 U1 B0 B9 X1 w
    - x& B  j% ?' E7 m1 l$ ]
    水煮鱼 30 1 1
    6 U6 [- r3 f7 I3 K
    # K' l! }4 i& f7 B& s  B+ g" F+ q口水鸡 18 1 1
    + M$ T- M: ?# s- G! }, B  [! N
    - n  {: n& }  ^+ [& G4 X# |5 s% x' S清炖豆腐 12 0 0
    3 B# F. }: B; Q8 O0 J5 G9 m& Q& q
    1 1 1 1 # B0 s6 F9 b; Z- T6 v

    5 [6 `& b" F) z; K4 s4 o5 {3 {
    2 i4 |+ i& u5 s( H9 ~) g
    输出样例


      G! V7 ]# P8 }# E. P- d口水鸡
    ' C# w' O6 K# P2 X1 q  P( E8 }3 ?) l( s4 n
    清炖豆腐 4 |1 t# t) b( O0 U; z
    2 ]4 k/ [5 s# H5 P% q, u
    12.00
    . P; u3 J1 t0 r# u) f/ ^' Z

      G# M$ @8 x* E, l1 S

    " J' W- y/ o( j6 H
    & l* G5 I! y" q0 |1 s: }9 i% l& J时间要求: 1S 之内 ) s. h% A- k, m7 z& I( B$ k

    1 F( g, x  ^* k5 B. [8 Qexample:
    $ b9 ~5 C4 O1 L: u. E/ U#include <cstdlib>0 Y$ s  b$ V1 m" s
    #include <iostream>
    # |/ N  O4 D; s6 x0 m8 V0 B7 e( y4 `
    using namespace std;
    ( w' n4 ^$ ^! e9 d6 w! [( n
    2 J& {8 |" \$ W9 t" j/ t7 |; K
    ' h6 _" E7 T" ^( a$ X! cstruct cai9 H! @& k& S# F0 Q8 E  k
    {
    2 Q# U* n: H/ y1 a       string cainame;! W) j% G+ P% m' z' G
           int price;
    : q/ s9 g9 L6 l. Q# g       int hun;0 ?9 o3 {5 j, w& g
           int la;
    # y8 D* S  P2 d" }4 |3 h8 Z0 S6 A       };( E: r3 X' F# |
    int* alltotal=new int[30];
      U' y/ o3 J6 u6 m* a, q! Q6 Mint pos=0;
    0 ]8 {8 ?1 X' E1 l. v. jcai* pcai; ) z. h, O* }6 m- ~" n2 f. p
    int N=3;  
    $ ], [" e1 y3 a% s# J2 xvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    0 G5 T' V' ]1 Zint main(int argc, char *argv[])
    3 x" k8 H4 w, M! ]# @{
    + G! ]2 x; i9 i' ~9 C- J. g) `# B    int M=2,K=2;( y7 d! G! k9 ^- \& k( b- g, O" _8 M
        int a=1,b=1,c=1,d=1;7 T: [& U, V" Z
        pcai = new cai[N];0 |# J: U$ ]% T8 ~" _5 A( z' T
        pcai[0].cainame="water fish";
    " B0 J2 u" {$ Q$ n/ h$ A    pcai[0].hun=1;
    8 Z  d+ Z4 E6 u    pcai[0].la=1;+ ?  |$ S% h% {* f- i) t* K6 }
        pcai[0].price=30;
    / \: `0 s+ w' a5 p    pcai[1].cainame="mouth fish";
    7 h5 I8 r4 s, a/ y3 s6 L+ z    pcai[1].hun=1;
    5 J1 n+ X+ d- t+ I    pcai[1].la=1;( C; |5 A9 r7 x
        pcai[1].price=18;
    . \- G, S4 n# k    pcai[2].cainame="doufu";
    , M, J, A( b) }) j    pcai[2].hun=0;
    * G4 L( D1 |( \! I/ g    pcai[2].la=0;# d7 @4 G  i2 T; Z: a( d
        pcai[2].price=12;
    + W% N7 F) c' v* g) f* X    for(int i=0;i<N;i++)
    " b9 N* w0 B2 ^/ e. u- W    {( G% j, `# l* a6 T7 S
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
      L0 I6 l1 t9 W. Q, Q6 r        {1 ]8 v: e& ~! k  b' J
            int ta=a,tb=b,tc=c,td=d;   
    ; f+ T% q9 G8 o! g5 d+ e2 r        int* select=new int[1];    ( B; ^: h% l1 b
            select[0]=i;
    ' J( E* R/ `; ^0 K+ ]        if(pcai.hun==1)ta--;else tb--;
    ) R5 |( M$ S" n  n        if(pcai.la==1)tc--;else td--;2 c+ d1 U7 ?0 ?8 F0 H2 J0 }/ k
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);! ?  B6 L- }5 ~7 k  ^  g4 y
            delete[] select;
    + e! b; _: B; z/ d1 U' N- o        }( [1 i# z3 i  I. P5 l; P* K0 o* o  j
        }& {# H7 l8 V& s/ k3 B
        for(int i=0;i<pos;i++)$ I1 U' J( q" m. l
        cout<<alltotal<<endl;
    5 G, R! O  t; Y6 t, L* Y    delete alltotal;
    9 p8 l/ C$ S) K    delete []pcai;
    ; Z7 X7 v& A0 m6 `    system("PAUSE");
    . {+ n/ n! b# [! @    return EXIT_SUCCESS;
    % I6 A" u  h/ a1 T! t( q: Y}
      O2 A; v2 V3 o0 S: s/ P& c- M: Gvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)! ?( J; C( S$ G) Q$ f6 o% K
    {
    2 t' }; N0 i) b8 Q* T    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;' a1 G) K, X4 [8 q8 c! K
        //getchar();
    / P) @6 _/ s, ]' ]4 w    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;, y3 k. S* p* }3 Y; Q5 M
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}) D& I, U2 H# _. c$ q  b
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}4 g0 Q+ O" @$ I
        for(int i=select[n-1];i<N;i++)" |! n8 W' V8 P: o! G3 v6 o3 I
        {
    & i$ u9 H0 T) S9 p  ]         for(int j=0;j<n;j++)if(select[j]==i)continue;
    ' `0 @) e. ?8 t        if( (a<=0&&b<=0&&c<=0&&d<=0) || (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    * B7 k% r5 o/ j        {
    # j9 @; W5 e7 y  m' z3 w7 v        int ta=a,tb=b,tc=c,td=d;  i1 w) m$ I# W
            int* myselect=new int[n+1];    ( U( I9 r. T9 K% _
            for(int k=0;k<n;k++)myselect[k]=select[k];8 H0 Z8 R, B% {0 e0 V
            myselect[n]=i;
    ; e6 d! b+ x6 m! U6 C2 l7 i! Q  v        if(pcai.hun==1)ta--;else tb--;
    ' m( \" C- j6 b; q; W        if(pcai.la==1)tc--;else td--;
    % v+ f' g) p* R9 j9 R; _4 T" i7 ~        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);7 o, l) b  U7 m) M; [' _: H
            delete[] myselect;# I) t6 V( a+ X2 h( _" c- D2 Z* ~
            }* \+ N" E" o# F) y' _  Q
        }4 A  _) _7 ]2 @/ c1 T6 F, ^! ]
    }
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    928171481        

    2

    主题

    6

    听众

    34

    积分

    升级  30.53%

    该用户从未签到

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-11-8 23:46 , Processed in 0.489022 second(s), 55 queries .

    回顶部