QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12523|回复: 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 |邮箱已经成功绑定
    饭团的烦恼 9 I6 `2 r* ?, p4 J: d1 T* i
    ( t0 L2 z1 x2 u& K
    “午餐饭团“是百度内部参与人数最多的民间组织。 0 ?6 ~1 y1 N1 n3 D8 w, a5 ~$ o6 m
    # z& r! B3 Q* m& k9 Q# v$ b
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 * [/ m1 E: [; B$ c7 s

    5 R  L+ {2 H* ?4 M( q3 S7 B- i参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 2 _) G! r8 k( s8 _! O( c
    # y2 f& V: q6 G- @
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    . B, T2 A# V( t  n4 u9 X  `
    1 z7 @* v) D. ]. x3 G饭团点菜的需求如下: " ^- _( y- h( Q1 _3 }$ m* u

    # i9 S6 f& w9 v1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    , G5 H/ z* R" A) q
    1 n- K9 y* q' n- O! n8 V0 O2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    9 F  G0 Q& E: [6 G8 W! K: b$ R2 v/ f7 q; g- Z# z7 u
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 / a4 f/ d+ b7 c' T2 K/ Q; L) D! t

    7 w: A: ?2 q1 G! G# P输入数据描述如下:
    9 D/ a$ D; p4 [+ W" Q# q8 M* s' Q* {# x  F; ]8 m4 _8 W$ B" `
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 # P& t% Y/ {3 Z) g
    . B5 _: s$ ^8 Y
    紧接着 N 行,每行的格式如下:
    - ], A1 e* @9 V& ^% _
    % n7 }7 r0 d! y4 `菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) : X9 F6 J- x2 {

    3 S1 Z. V, N4 F9 f1 h$ j7 T例: 5 f! X9 f6 ?5 k! i8 L

      K: ?4 {3 \3 ~% ~+ p4 j# \  j3 G水煮鱼 30 1 1 ( L4 d& Z4 Q0 t" j
    6 ^  h+ ^- A0 y2 {) r
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    $ O# J0 j, y9 W: `) x, @( Z: C! S$ ]1 C3 t. `
    输出数据: $ g' D0 g8 w0 W7 J: x
    " W$ W2 m: F1 f  Q  a8 Y* T
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
      N$ B! b' Z& H7 z: }
    * [0 H* {0 l% p3 `7 `说明: 5 S3 M) P6 G2 z2 R1 H  o$ T, s" g* }

      V. r7 k1 ]3 h5 x8 x# S2 J1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    3 Y# e# l2 W# \" @% j. X3 u! I  l5 O8 C& U$ e8 c
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 8 Q' s  h: x- L6 z, L. ]! v4 R
    . t: Z6 _0 m" g
    输入样例


    & E1 o; X7 t  l. K6 Y" x3 2 2 , b: G3 ?; q4 J7 B# _

    - d3 F) }$ V# R, {* {水煮鱼 30 1 1 ; W' w6 f  r- k* n1 o0 D/ h

    4 R& }3 z4 T& i0 Y  h口水鸡 18 1 1
    - S+ p2 f' a/ d7 H8 r( l9 S+ M) O! ~9 J
    清炖豆腐 12 0 0 * u% w% P  K" A$ k6 _
    5 Y, p0 \  n) t+ Y- A
    1 1 1 1
    0 S, t7 p6 N( Y3 C) K4 w) R


    9 I. e! W5 x, h0 g) D) K) }. w& {- Z0 l
    输出样例

    ( N  r; @8 e2 V2 |/ J7 g+ I
    口水鸡
    ; f7 G* [+ ?% ^& W$ A% i3 D& D8 ?$ z0 C, B3 Z* C
    清炖豆腐 ; T; B8 W; S/ h# y0 F* [; K- s

    ; X# K% \- w# ]7 Y! k1 d* X12.00 ' F! o) @) L, T( m) \  h; P

    1 f4 F9 Z1 |1 l+ o  V

    , T! Z& f0 R" B. P, d/ e
    # [! Q3 s. w& o/ U时间要求: 1S 之内 ! X" n1 s0 R, s) a7 E

    * {6 j, W3 l" k) i+ B; eexample:* S# L: w; @/ X/ l/ ]9 p
    #include <cstdlib>8 `8 I3 F0 O5 w4 w
    #include <iostream>2 {* ~  L1 F; S& a

    ( T( J, M% q+ Y6 Ousing namespace std;& Y+ P4 c  x& `. y9 E

    5 Y( g* ?2 E. ?; F8 L9 i  p
    / e7 z1 f9 L, c1 ]. _2 `8 a2 Tstruct cai
    : v$ c- P2 b6 Q- C0 V{5 ^- W; L! C7 c6 L
           string cainame;4 ]* X/ l: b( b, R; J6 V
           int price;& i* r- Z  B- L2 E
           int hun;$ ^' Y; \2 P0 L1 x' `2 |7 }$ {
           int la;
    & _% u( s" o$ a6 I6 v6 e6 g       };2 k/ g! U# I- L1 g  j
    int* alltotal=new int[30];) S( ~. w9 P6 _! h# {
    int pos=0;
    ' h# Q8 o. g: \3 x4 y, r, u8 Scai* pcai;
    2 ~" i5 P2 V9 t( n* S1 ^9 ]int N=3;  - R" g8 \3 z3 o: ]- l
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total);
      B2 z0 X$ U+ E7 bint main(int argc, char *argv[])
    7 r! p5 E8 {! v/ l# [$ K{
    % }! J, q7 X; T# F/ c    int M=2,K=2;6 V' U4 H. ?5 H% p: m% X/ q
        int a=1,b=1,c=1,d=1;& \! K3 y7 x0 a/ {, ?+ _1 M; `
        pcai = new cai[N];( q; i; \/ m5 e
        pcai[0].cainame="water fish";
    , L+ E' P, b+ R$ W4 G/ L0 S5 I, ?    pcai[0].hun=1;% J2 e7 e" w1 o9 K
        pcai[0].la=1;
    ; M/ Y* [+ O3 H' T    pcai[0].price=30;( @9 K, U2 u4 v0 Y& L& Y' o' E
        pcai[1].cainame="mouth fish";
    - }. p, d3 `1 v    pcai[1].hun=1;
    : ]3 w: E2 ~1 p    pcai[1].la=1;
    - T. i  U( j- M; {& |' K    pcai[1].price=18;
    / y: q( s. u3 o    pcai[2].cainame="doufu";5 n0 g+ ]6 N3 Y% ^" O
        pcai[2].hun=0;8 f3 h: U/ J0 ~. ]: s
        pcai[2].la=0;# w3 P$ V: A. ]+ G9 r
        pcai[2].price=12; $ B+ D& B& P1 w4 D2 A
        for(int i=0;i<N;i++)
    ; `8 }: T% A0 z! }# m3 f0 ~    {
    , _3 W3 k/ @( ]' j* j        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))6 X$ N$ s0 p4 q# G
            {% T* h" O* h) U6 d
            int ta=a,tb=b,tc=c,td=d;    : b% C. o* q$ Z% J! ^( Z
            int* select=new int[1];    ' }5 p- G! ]( y# u+ u
            select[0]=i;5 A. N. U" h: x' I6 \6 _
            if(pcai.hun==1)ta--;else tb--;8 x  E, M) _9 I- Q3 I, _
            if(pcai.la==1)tc--;else td--;
    $ Z  U' S: I) n7 K        fun(select,1,M-1,ta,tb,tc,td,pcai.price);8 G! v7 r- o- C, l
            delete[] select;
    $ ?. {6 i1 i* v5 }. e8 B        }6 H: ~: ^- `7 J2 [! B6 h# ^7 _7 P
        }
    % `( W# _. R' {4 v$ U    for(int i=0;i<pos;i++)# a3 \9 [4 `2 N1 o  A
        cout<<alltotal<<endl;6 n7 \3 S: b$ ]! f" {8 E
        delete alltotal;
    * F2 t# y$ R& `( s) E/ r( a6 l    delete []pcai;& E; M5 v! _* t! ]
        system("PAUSE");$ e2 x9 j6 P$ U3 a. i. m" I
        return EXIT_SUCCESS;! J0 J% }* B; B: [4 D* E
    }
    ; `! P- l: a3 Y* k- v# O9 O; ?void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    * ?* q: M& C( J6 _; Y{
    - B4 v+ H9 b3 h2 s    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    / ]1 E# N9 n1 i: ^$ L, D    //getchar();3 E7 t0 x5 y: b
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    2 R5 N1 V, j3 R4 h# q    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}1 J. J' J9 D5 I" ?* c' S
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}  @5 j& c4 q5 E6 d, }
        for(int i=select[n-1];i<N;i++)
    + H. _- C" e: l3 Q    {* o  `, {8 l, F: I$ _( A' H
             for(int j=0;j<n;j++)if(select[j]==i)continue;) G( q6 f7 N8 @& i9 F, ]) s
            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))0 [2 }4 I, z$ |% P/ y3 P9 V& }
            {
    , X5 S7 o; a5 k- a        int ta=a,tb=b,tc=c,td=d;# N' L1 G0 ]8 q4 F/ H  G
            int* myselect=new int[n+1];   
    # m) o% ]" W% M- c        for(int k=0;k<n;k++)myselect[k]=select[k];, Q' X" k6 G& m1 a; Z) e2 P
            myselect[n]=i;
    8 ~0 N2 [3 X  u        if(pcai.hun==1)ta--;else tb--;9 @1 d- y! [  y+ c- k
            if(pcai.la==1)tc--;else td--;; O" q/ D8 |: R. X6 g4 z
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);+ A0 t- Q+ f! \: W& @9 I2 U! S$ |
            delete[] myselect;
    " @. C  {7 L' u/ j# N% W6 c        }7 K0 n( ?  L' P, c! b& N4 V0 h1 c
        }6 K  w( J9 }, Q- V/ ~5 }+ [" T' {
    }
    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-24 05:10 , Processed in 0.468987 second(s), 56 queries .

    回顶部