QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12527|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    $ ]/ P1 S7 E4 {$ z! a- |2 _# c8 b
    “午餐饭团“是百度内部参与人数最多的民间组织。
    5 q/ t* z8 h6 L5 `9 H  C# P
    # B3 w, x6 r% a" j8 l同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。   k5 `( T3 B# ?0 f  `
    * h& \% `1 H# O7 f4 [2 }6 L! Y
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 * Y3 W- u& w& P" W2 O* Q

    ' F: ~! ]  Q1 d" D0 z7 N& y$ T但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 " h4 m0 R8 G* h8 _4 _) k; H  P1 r
    : ^3 P+ A, z$ e+ E  M4 I
    饭团点菜的需求如下: ! Z8 a1 s, X2 @% u4 n

    - Y, y" q. P9 u, v* o0 M, B1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    - e. w- a+ m: ]0 K
    5 f8 E' b" C* G6 y; e2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 3 n# l% H5 l. R4 S

    + g1 ^. ?* s% `3 P* k; J/ {3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 + o- v" G- ?3 N0 I$ a( K  v

    8 {' H, j3 p; _' x' ?输入数据描述如下: ) f2 j/ `1 Y: a% ?- I+ x

    4 f: R. K9 f( _/ j8 c* B第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 3 R' R- F3 o0 V5 Q1 O

    4 Y# P, e3 |  ?3 y& y( p紧接着 N 行,每行的格式如下:
    1 j  m# I! e  i# S  }% T" a# I" l! _% @0 h( J" ~
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 9 S8 M3 \4 Z7 u
    ; f( @6 D5 t: h$ v; W- c( j2 T
    例: - U6 G( w4 v# A8 o# q- O- o

    ! q& W. x( _" M5 X1 K水煮鱼 30 1 1
    ; ?+ o! {, A; p& a0 V- E9 W2 q) Q" W5 D/ P% V1 N1 i
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 3 b" P5 w3 @$ w2 _, t

    3 E$ e" h$ b2 P% q" m1 r# g输出数据:
    , t! |3 V) W) i# U
    % A. U. I4 f& I对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 5 C5 p2 ^# Z7 f9 u7 A
    ) B5 l+ W, Q* o' y+ H8 C; y
    说明: 9 X5 g0 h' A' Q6 c; q

    $ w0 {" @1 q# l% Z: I1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    " e: m; E4 N$ M6 g4 U! |9 C) K- m+ J" p7 U8 k
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 , ]$ r0 S- k& r/ C

    $ K  E# ]/ Q7 ]$ [% F& r/ K3 [输入样例

    $ S4 h; [' z9 d  Z7 u0 i
    3 2 2
    ! S& t- B) `+ L. H2 q& b* ^" Z7 Z- m1 P  X1 }5 n# {5 M
    水煮鱼 30 1 1 5 n8 M" m5 X$ E7 Q( ]
    " o8 p, n; e1 C2 C; |7 h3 }3 s
    口水鸡 18 1 1 8 t0 g% b5 D+ Y! j: c

    4 F) M( }4 M  a- o6 B5 @清炖豆腐 12 0 0
    ; ~' j% g6 S" _3 x8 t0 N6 e8 D, f: w; E$ O) O& j
    1 1 1 1 7 C+ l" i9 I9 v, b9 m  |& b

    & t. M" N, \0 X3 L; ]  F. H* e
    7 z2 H. \) x: A  e" X
    输出样例


    3 a3 J  S0 S) `# s9 w( o  E+ U- d口水鸡 2 w7 i  \2 @- E0 C* J- }9 k
    9 O  l) h$ `) d& Q. z- ?4 i7 L
    清炖豆腐
    % ^7 j# b. g* p% n0 A& @6 ]# w/ G& T' y& Q/ o
    12.00 ! x) u- L  b( q6 W  ^


    , I) j* r! ~" w' i
    1 p9 f3 W0 P5 I! J/ R
      c' f( q1 t% M- V时间要求: 1S 之内
    2 M8 F* \% |4 ?2 @" s+ g; Z  _0 q$ g: h& t7 K, q
    example:  }5 ^$ p0 U( b# z  x$ M- q2 G
    #include <cstdlib>
    9 P1 h& o; C' V% ?#include <iostream>
    6 a/ X" t; V3 N! p( M0 B$ y
    & Z; p: ]/ V$ F! f6 U8 P+ Cusing namespace std;
    9 g) T$ V/ k: R. ^( a3 K' v+ S, i' G; p( [! C

    3 h! c7 O4 T& n8 pstruct cai/ P1 ^% I7 n& Z, K. @0 m# @
    {/ A7 B8 e0 K/ m" x5 H4 j
           string cainame;
    + y" a8 T5 ]4 X( n$ Z       int price;+ t& u9 ?0 O6 p8 j' v
           int hun;, G/ e; K" N% c
           int la;! y& \/ r7 t$ {+ y
           };: C  ^. K6 ?2 j4 D. u
    int* alltotal=new int[30];
    ; {9 M! S- ?; F& V. sint pos=0;
    * J- c" B4 C. O! f8 Kcai* pcai; 8 B8 R* M- e; X- ]( P" p
    int N=3;  
    ! s8 k1 i/ l/ n6 Vvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);' M4 I- K1 t7 ?" G
    int main(int argc, char *argv[])
    9 x3 b/ b" ^. v. E{
    9 _% X, m* Q2 w$ L0 p, N  M( D    int M=2,K=2;
    9 i3 q3 p; j+ l2 z$ R' G$ T    int a=1,b=1,c=1,d=1;
    8 U! \# L; `$ B" C- f: m- K3 i    pcai = new cai[N];  c+ i' [7 \2 m+ s' }
        pcai[0].cainame="water fish";4 W8 {: {3 U: \* b$ R% L" J
        pcai[0].hun=1;6 n. E; e2 t9 [+ w
        pcai[0].la=1;4 e, v& F) c5 B/ d
        pcai[0].price=30;" I* }5 P2 o) ~7 n! P/ {: o& O
        pcai[1].cainame="mouth fish";
    6 r7 i& m! I9 \: F! J! {- u    pcai[1].hun=1;
    1 q; }% V( `3 y& n7 U) g    pcai[1].la=1;
    ; V  M) i/ Y0 s+ o2 }. ^6 f    pcai[1].price=18;
    ' b2 w0 L- L. t7 {    pcai[2].cainame="doufu";9 `: R/ O0 f& k& }" j
        pcai[2].hun=0;; Z" s6 {& U3 G2 a( @1 G
        pcai[2].la=0;+ q" f# Y: R2 K. |% {. \! C) P# A
        pcai[2].price=12;
    ) F! C  n2 M  Y% z- b5 p    for(int i=0;i<N;i++)( P1 F9 W" I2 N) i
        {7 P  P3 B6 C$ d
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    ! j$ b8 b/ ^4 j& y, q8 q        {
    ! @$ Z, f+ {6 x2 Z. X        int ta=a,tb=b,tc=c,td=d;    ) R& f( B% |- b) h% T
            int* select=new int[1];   
    - B2 P0 f5 }& P2 a& `, L+ \        select[0]=i;* {/ X2 }! |5 X" q5 I# E
            if(pcai.hun==1)ta--;else tb--;
    % L! {2 ?& A* z: S7 B        if(pcai.la==1)tc--;else td--;1 w' b; i: l1 j  T1 b( h/ B
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
    4 p1 ~% }& w6 @  e/ ?        delete[] select;5 P. @! v5 i9 A1 R  j9 E0 G
            }
    8 ?" g2 L  }* q; e    }
    ! B/ u: _( t, F1 I+ G    for(int i=0;i<pos;i++)
    - _% x9 R% Z; s( K2 u    cout<<alltotal<<endl;# `; R6 o7 S% \$ g5 F, ?3 q2 u. N
        delete alltotal;% b# }( `2 i$ t3 V
        delete []pcai;* S4 k0 J2 [" h9 ]* l% @7 k
        system("PAUSE");
    & _+ c# @) C: X! W# f4 X2 p; \6 l    return EXIT_SUCCESS;( f, }+ D7 J( U0 f9 Q
    }
    4 Q3 M$ ]% g# Y8 D4 _. f/ G$ v/ g6 S' hvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ! x% |+ j2 S# F" T, V{
    6 v+ G2 V! v* D' ~5 y    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;8 v3 m4 }1 t6 A  Z( B5 d* O
        //getchar();
    1 y' o2 P) u: w, A/ ]8 J0 r3 ^- `    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;1 W- t: N/ B; {2 x: Y
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    . [) c9 f) d" e% D+ p! h    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    8 \# i" H1 G* I3 s- Q" P! p! A    for(int i=select[n-1];i<N;i++)
    ) g  f* t/ g# z* {, k    {" Q: u& I* d: {+ M% P' n
             for(int j=0;j<n;j++)if(select[j]==i)continue;* L4 T7 ]1 c4 t" U8 a3 G
            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))3 J& t- ~2 ]6 T- N1 `
            {
    ! L: Y  `+ r- \& W0 a7 V7 e        int ta=a,tb=b,tc=c,td=d;
      z, m4 }" Z# I" ^  [. P( B$ O        int* myselect=new int[n+1];    - ]/ ~; }9 `; {$ U2 ?; X0 `
            for(int k=0;k<n;k++)myselect[k]=select[k];
    ! W" W. l) Q, ~        myselect[n]=i;; m& m- }7 \- ]& V1 e. H
            if(pcai.hun==1)ta--;else tb--;
    ; `4 g% L2 `, H$ |# ]        if(pcai.la==1)tc--;else td--;
    - i6 b" s& C1 y2 ?) d7 q/ c4 M8 i        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    $ p: k. W0 k" Q2 f        delete[] myselect;3 r; ]' u' a4 x0 y, o
            }
    ! i  I2 M1 h. o0 _& E7 ?7 Y    }- C: U5 R" ?- P
    }
    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, 2026-8-27 12:00 , Processed in 0.642566 second(s), 56 queries .

    回顶部