QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12332|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    : u' f+ b& w5 K* y. b/ g3 P- @; e2 ]
    ( G* B  P; G5 f+ q0 Z+ Y“午餐饭团“是百度内部参与人数最多的民间组织。
    6 U- S% h& }: s! p' z# c- g- G0 I- y. ^" |1 f4 A; t
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 4 t2 L4 ^2 c+ S; {
    6 X+ g" V6 Z( _% L/ A
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 $ d. y4 {$ d( o/ ^. N) `
    - Z, L$ h3 C. G8 w8 Y
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 $ w' S  |5 E; i# [5 G3 R
    3 F7 p8 j. K3 d6 |4 j& T+ b5 _
    饭团点菜的需求如下:
    0 e0 y2 F# `  t% G$ c' z" z
    ! q9 V! T- M' V# [1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    / r+ B1 X9 W' p, U  \2 _7 [9 S( `6 a2 r6 R
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 4 l1 U. a4 U8 T' m- L3 J8 t/ Q
    5 k2 C8 ]: J. |* Z3 y
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 ( ~2 R; \' n) }3 x

    : \( c3 ]  o- |/ A; O输入数据描述如下:
    ' A- E$ K" [5 o2 r: b8 L( l/ Y! C3 m: R5 @# w( j- l# i& |) j
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 ; [- d% ?' K) ^( a& |
    * q  H( E2 x0 |+ v8 `6 g" ~4 G  _
    紧接着 N 行,每行的格式如下: / c$ J- _0 S) w- a* X+ P& j" o. n

    4 @$ Q; `$ V' w; g* y菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) * C/ ~7 N/ W7 n8 O1 B+ H! u/ ~1 r

    8 p1 u8 M# F8 c9 {1 K例:
    & @6 D( Q5 o' z
    4 l) L7 j! d3 Z$ b水煮鱼 30 1 1
    5 N) `/ I* J' L/ V) `/ n
    & g8 ?1 ?) @) C0 ?" y. H! @) D) T紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 , d! T/ y4 Y, l" y
    ; s2 G/ o" E8 R+ V8 c6 J/ [
    输出数据: ; Z/ Q3 m6 @. j  t% `: G
    ; R1 J5 D% D+ U& c
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    % K4 {, X; F. E& h! P8 Z: k4 i' C: L- v/ n; d! v/ p
    说明: ! S9 h) Q$ z* n8 N) A4 P

    / E4 y- @$ l/ ]* B1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    7 l6 v2 \$ m% L/ r' I, r2 Q% A  T* D& c4 q' y% j. J% a
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    0 [) |1 k1 {+ D, Z1 s8 n; t3 l' U5 b% b" W  T' F7 y
    输入样例

    ) x8 U4 s+ ~- F, k1 [
    3 2 2
    % S- J0 h/ T+ W4 x) g. x9 v  K# T: T+ w, A+ X) c8 P. s8 `
    水煮鱼 30 1 1
    9 c4 B, o, d& Y4 D- x; M: w0 o3 b+ l/ E
    口水鸡 18 1 1
    2 I5 n4 f% m, M! m1 V: U
    $ `2 I8 d. c1 U8 O" l清炖豆腐 12 0 0 & V% D+ G1 K* q- z/ w9 C
    $ T" y+ k1 n1 m2 ~* [) }
    1 1 1 1
    # Y% ^4 s7 f6 H* Q* `# p+ Y' U


    & M5 \8 X! y" @4 t5 R& |* f: v/ U: u1 ]% w1 C, Q
    输出样例

    5 f4 k8 m" z2 R- S1 p
    口水鸡 ; P1 C- ~( a  z  n2 q- H' i
    * y" p: F" j4 e% Y1 \
    清炖豆腐
    2 u: M: s2 P$ `2 s# S. p3 B! G
    8 l! u- m* V9 i: X9 x12.00
    ; C8 h; U# c( z7 a' l6 M& V

    : u/ ^3 v& H7 D* X7 D5 ]
    . o9 n5 {, A$ p/ g

    . J2 a9 \( e4 R0 o: N时间要求: 1S 之内 2 Z. U3 h. p7 v9 y2 M, u3 z
    4 u$ S! H* j  u. ]4 K& J  L
    example:6 A6 E9 E' F0 O8 ?3 F9 Y" ]( V
    #include <cstdlib>
    6 U  F$ {. z, F- ^3 C. g' |8 m#include <iostream>- Z4 ?5 j7 g2 |6 r& l

    ( V( p- _* i2 ousing namespace std;% Z3 \( I3 b, i

    6 S' n8 i9 `2 c. n# v' w6 s0 J2 V5 ~( H1 e1 W. r6 m
    struct cai
    5 a. d4 C; L6 i# f7 S/ v{$ z) v8 b' L" p8 Q( W! c
           string cainame;
    4 s0 W( d8 n( v9 _       int price;* R: M1 V3 s- U. P" e$ q  m
           int hun;
    . x% k5 A: X1 G% n/ F/ \       int la;
    2 d4 t7 M/ R; f0 U) j  h) V; z' G       };8 i6 l: ]1 j. ^5 }7 x
    int* alltotal=new int[30];. B4 |3 c( h' ?/ p7 G
    int pos=0;
    * ^1 n9 v6 J5 Hcai* pcai;
    1 ]/ F' z* d5 l" |. |6 ]int N=3;  * n! F: E* ^' q" D! r
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total);- @, D( y0 i% J5 B$ `
    int main(int argc, char *argv[])1 z- z5 Z8 h6 a* j; i' H7 ?
    {; E5 n' D' q  p$ Z! x
        int M=2,K=2;
    0 L6 s+ W! c9 f5 |7 w! f$ A6 k% h8 U    int a=1,b=1,c=1,d=1;
    - [+ s4 S+ E6 }$ N' S7 ]    pcai = new cai[N];
    , Y  r3 S$ ^; t# m" W    pcai[0].cainame="water fish";9 I8 O- @" b) p9 E
        pcai[0].hun=1;% ]- e: }% I2 X- w* n0 g% L
        pcai[0].la=1;
    8 N2 b6 T6 y! w( ?  w4 b; B    pcai[0].price=30;
    7 P' e( q0 B3 p0 Q8 L    pcai[1].cainame="mouth fish";
    : q/ W, `6 U2 S* J* _    pcai[1].hun=1;
    + e9 u8 n1 V" p6 C" ]2 x    pcai[1].la=1;# T& @3 [8 [6 N( a1 H3 p
        pcai[1].price=18;
    2 H; g6 o* ^/ T+ c  k* U    pcai[2].cainame="doufu";, U. Y5 X. U$ [+ G7 a1 y) ]
        pcai[2].hun=0;
    : x9 [  g5 L/ p! J& `- r  {4 R    pcai[2].la=0;
      j% \/ c& a2 J0 b! o  j/ T9 J    pcai[2].price=12;
    5 `6 H( _6 D8 W( f    for(int i=0;i<N;i++)" D+ _, P5 }. F, {! N/ _) Y0 Z/ {
        {" F1 n8 A% r3 r; c$ u( y
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    # V: R4 z+ P8 p. C        {5 y; N! F" b7 w3 {, {( ]6 h6 [
            int ta=a,tb=b,tc=c,td=d;    * C$ i! g/ O* i8 b5 ~) {6 x
            int* select=new int[1];    0 b# z# S5 H. s! ^" i
            select[0]=i;
    ( v) [6 A6 K7 W5 w# }, Q) Z        if(pcai.hun==1)ta--;else tb--;3 Z  {: i4 K. |: W2 ^; u
            if(pcai.la==1)tc--;else td--;
    , I$ `* O3 y4 P2 ^1 c- d        fun(select,1,M-1,ta,tb,tc,td,pcai.price);- y" t3 i2 ~6 T0 F8 l: ?+ E# i
            delete[] select;
    . ^5 [5 S  [, \2 U& o4 c4 I        }& x, J, d4 z1 [6 c$ c) ~5 f: o
        }5 j) y( J+ p- [. f  B$ J& Q" V
        for(int i=0;i<pos;i++)
    0 U% k. I7 I2 p, B  r: n. }/ O    cout<<alltotal<<endl;
    & a8 {$ i7 N4 C+ x! d    delete alltotal;
    / T( h! f. ]) ]- W/ j( M- O2 [    delete []pcai;8 n2 `8 C6 z8 D+ y5 H1 ?
        system("PAUSE");
    ! o9 e1 `# X- ^# L6 C% ^8 E  v    return EXIT_SUCCESS;7 ^' p6 w0 N( V9 E
    }# Z2 v0 p6 B3 g8 ?. E
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ) r; w' w" y# M1 J' T) K  J; _{
    6 S) w* m( U- O! ]9 u4 ?    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    1 ]& r& Y1 y& F+ ?) _    //getchar();% M0 s+ G- k8 a4 m+ ]  A) L* p
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;. [5 G( j$ v$ x! O
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}) `* Y) ]; u( \" O+ o
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}! Q4 l. o: j2 _
        for(int i=select[n-1];i<N;i++)( m1 L  `9 b: {
        {; |) A" [/ G4 I
             for(int j=0;j<n;j++)if(select[j]==i)continue;6 y5 D2 F* g1 e% W
            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))) w) ~$ M& O0 G% Q( T
            {
    # G- Y2 R) ^- P+ O        int ta=a,tb=b,tc=c,td=d;
    - w. y2 U! `. i2 I3 t, \        int* myselect=new int[n+1];   
    6 }9 ~- r: w6 m) O' ]1 d% K8 t; e* {        for(int k=0;k<n;k++)myselect[k]=select[k];
    , [" \2 W* _" R+ x! e) H4 I        myselect[n]=i;+ D+ d6 Z: r6 t; L  ^& \
            if(pcai.hun==1)ta--;else tb--;
    7 C9 d& H, x; j8 y; {        if(pcai.la==1)tc--;else td--;$ H) n+ ?9 _1 F4 h, p  [3 c: q
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);' k7 a, B8 K* m) p) ?" y  C$ M; x& o
            delete[] myselect;
    $ }. i3 Z' @! l- G        }
    / ]0 d" i% A4 _) t' h    }
    * Q) ^" x, w/ h+ e  Y+ `8 G}
    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-4-22 18:18 , Processed in 0.509368 second(s), 55 queries .

    回顶部