QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12412|回复: 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 |邮箱已经成功绑定
    饭团的烦恼 - E: y- ^+ r" L
    , |! d# V* t( G2 N# ~4 a3 U
    “午餐饭团“是百度内部参与人数最多的民间组织。 1 H9 D5 G( E7 r& v3 }3 [* O

    6 Q2 t" P) g; b6 k" h0 B# D/ R同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    ) q4 o  G& B) I- }& Z5 ]
    / Q" ^3 l7 O9 ]参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    - P# j1 @, ?& G' K$ `1 s0 I
    2 [$ |9 I# y- ~; I: Y- k但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 % k) o" P0 d2 |8 R* ~
    ; H" T4 I* l; r; L
    饭团点菜的需求如下: & b3 P: w# c% L/ `6 j

    " |2 C' |" I. k+ h+ _1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 7 X/ |+ ~1 {+ J1 k0 O, C

    3 f& }/ y# i' ]2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 4 |/ ]7 t3 @4 L. h

    " M5 I2 l1 J4 G; O* l8 o  z! u" w3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    # ?) C7 z% _8 A- h" J/ G- [* b, A  L; U- C9 K" Q1 t/ ]
    输入数据描述如下:
    " m% |' Y1 a: ?1 P+ m" S* X
    % Q" W2 R% P" Q: {& g0 ^+ Q第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 ' Y+ j" G( I& v  ~

    4 r5 V" X! X% ^* F, ?, Z$ _  Q紧接着 N 行,每行的格式如下: 3 ~( D# S+ ^, R7 n) u

    , Y+ Y% H2 t% c- D+ q菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    8 V/ t  n  u2 {# [1 I2 Z
    9 G' `* V( r) ]- k例:
    ; k9 K9 y+ n4 z/ U  S
    9 g# R- h2 A( q8 w) h0 ?8 @水煮鱼 30 1 1 5 ?9 i* P# [/ R( H, @% z1 d
    ' H1 T  X2 p' S+ c1 E/ m
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 - i, ~7 U. o& A9 S6 Z3 J( i' N' A5 l* ~* y
    ) G) [8 a, }9 z1 m
    输出数据:
    " g, L! r1 a1 ^" `& f+ y! l8 }- X- I* a% W1 H! A
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 & b% N8 ~# {, {  r" X

    - `4 X4 f; }+ X- p+ g9 ?0 R说明:
    , r) I+ D/ G4 e( i! c  B( v; m% H3 j% ~+ w. K  ?
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    ) c3 T* u/ o+ N- x# `4 K4 L4 @3 z0 C/ ]/ n$ c
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 + d/ h6 |% S4 g1 H4 t
    $ g+ o: ~7 _  N* L1 S9 x  z
    输入样例

    : K' G+ _( f& A0 M. |: T) x
    3 2 2 3 ^! [$ Z& G( W6 z7 t

    * _4 _: I3 R" X7 `( U0 V$ l# @/ c3 A水煮鱼 30 1 1
      r, Q0 `. p9 t, b/ V6 C/ Y' C( C( Z( E) `5 ?$ D* m+ \3 T
    口水鸡 18 1 1
    3 H$ g9 a" ?# |* P% s: I0 O" ]! L6 [7 K& G, Y3 ~
    清炖豆腐 12 0 0
    6 G" {. }9 V# F* ]) q# b) C9 J
    % s" W4 t3 e, k: _1 1 1 1
    , J: C+ N" [1 K; M


      {6 K% P; m9 u- W
    , H, ]- A' c& j) L( q输出样例

    8 ~5 Y5 H5 _  n' `: {9 Q
    口水鸡 4 [# P+ |* v5 M7 b
    ; O, {9 g. o" Q6 ~/ L5 ?
    清炖豆腐 * j$ {( b9 b- G! r

    $ s* l' b3 z0 k) O4 R+ y12.00 6 n7 h$ A0 H# V" w

    . K1 q1 N7 x8 I7 D8 j" V
    ! C& [3 k3 L( P& k" j

    7 \- @1 O' ~. Y( l2 B* z% c: v时间要求: 1S 之内 0 w6 L2 Q! K( V1 D* P$ T* c

    # ~" @7 j$ k7 ~+ J, `example:
    8 i4 a! }# p: h4 W: I#include <cstdlib>
    3 r. H. v5 t* g4 t2 X( `#include <iostream>
      G3 [/ B9 U( O; d1 E' T4 T
    6 J6 L. z" x2 d0 n5 F/ A9 Qusing namespace std;; v2 N% U( J  a- G
    & d: H, a/ U6 o( C" {  ~# i/ v" |

    - z- g4 ~* u; f: r  }$ estruct cai
      m: t+ `# K  p{% ]' @- s, Q7 i0 ?
           string cainame;5 x9 q5 {8 m7 N6 P: ^7 x: k3 M
           int price;1 `! k$ [7 D! k& @
           int hun;
    & a  o# K2 p9 P       int la;3 A3 U% I4 e3 J) E! o
           };. y+ K) G/ @  c( i+ C! s# ^
    int* alltotal=new int[30];
    4 l5 w( t* v6 {+ A+ Mint pos=0;
    8 S: D8 `# E2 Acai* pcai; ( a' t$ P" g, [' a' F* F9 y! e
    int N=3;  
    7 y/ W$ z% f7 Avoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);0 y: y: U" I$ O$ E/ X* |
    int main(int argc, char *argv[])/ e0 u4 _# x/ h' z1 t7 _" H
    {
    - T& N& a$ ]  u9 O2 p    int M=2,K=2;
    0 v5 [5 t' l9 B" ^' i    int a=1,b=1,c=1,d=1;; C+ n( [) R& L4 A. M4 i6 T! j9 o
        pcai = new cai[N];
    5 s% {$ k6 W, ?0 H5 e' Z1 H8 T    pcai[0].cainame="water fish";. o, \  e' f! t& \! t7 u: w# ^9 Z
        pcai[0].hun=1;
    : D7 m4 l: V! n    pcai[0].la=1;
    6 b7 f1 m. h& y( {& u; C  ~) I    pcai[0].price=30;
      a8 C! B% h1 L" Y. {7 C( Q6 }    pcai[1].cainame="mouth fish";4 p3 H  @8 ~5 Y4 c
        pcai[1].hun=1;
    3 z3 G2 W6 t+ l    pcai[1].la=1;- b- X. w3 V9 Y3 B6 x. ?5 o" v
        pcai[1].price=18;
    % {* x, N( p) F' D7 e    pcai[2].cainame="doufu";# @  i8 x2 E* u5 ]; L: g2 _- q
        pcai[2].hun=0;  N8 I& ~. y; Y& g: _  O; v
        pcai[2].la=0;
    * _6 F$ f2 d9 T5 U9 s5 _% l9 S    pcai[2].price=12;
    4 c0 m5 e6 w9 K% A" @) G    for(int i=0;i<N;i++)4 b" l0 m* r6 M$ q; e+ W, Y, F
        {, q# g: C1 f  A
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    $ r5 |; e8 {, t" g        {  u; O( B2 S# n0 v9 w1 @
            int ta=a,tb=b,tc=c,td=d;    / n3 Q: x2 y  t: ?$ ]7 e
            int* select=new int[1];    ! [- s/ p# S2 Q! a' u3 T
            select[0]=i;5 G* }) a* ^% W1 N. L4 R1 R; z
            if(pcai.hun==1)ta--;else tb--;5 ~. a! X2 V% `! n7 f
            if(pcai.la==1)tc--;else td--;
    # J4 S* Q& `( Q- L$ U9 i& W' _/ V        fun(select,1,M-1,ta,tb,tc,td,pcai.price);& |- w3 {  z  g3 e3 t
            delete[] select;
    ) x' I% Q( C# M, Q& m        }: P! m2 i8 u1 W: }8 [$ g8 o
        }7 m* W0 X* r. R
        for(int i=0;i<pos;i++)- C, p- r. M7 W7 C, Q
        cout<<alltotal<<endl;
    # d2 N# {9 @2 f    delete alltotal;
    $ i. @! L1 _! l2 _    delete []pcai;
    % J; s; f+ A' N6 P$ H5 T* R3 G    system("PAUSE");
    / V7 @/ X: g! i4 m/ t8 W* e    return EXIT_SUCCESS;; P% h! n, T2 J
    }
    ! j2 `, Z2 b3 L5 T7 D% ivoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ( a; \+ }% [9 R6 G$ Q$ Q{
    0 D: B+ n3 w- H& m. B0 ~$ s    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    , Z/ V' P; j4 G' y- Q) _5 W    //getchar();3 j, I% a4 A0 j- R' z+ n0 y' B
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;* n( c; C/ _' x$ U  \* |8 o# X
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    8 m! H5 O0 N2 M, C$ s) U# C    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    8 f5 x1 E. Y) |0 \& @    for(int i=select[n-1];i<N;i++)/ ^( I% p% C; W  T& S- A. T: z
        {6 K7 q) v# d) V8 J# U- w
             for(int j=0;j<n;j++)if(select[j]==i)continue;
    * I$ G6 b9 x* A. E7 w# @) h        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))
    , U1 A& Y: w+ o        {" b1 d  f5 z, c9 M2 j5 j+ R% P
            int ta=a,tb=b,tc=c,td=d;" v- q1 [2 X/ p
            int* myselect=new int[n+1];    * V0 M1 X1 @8 ]: _" H$ v5 d
            for(int k=0;k<n;k++)myselect[k]=select[k];- b1 x, N  ?* B3 u
            myselect[n]=i;
    + f' T7 k" [5 r9 V9 A+ X" C        if(pcai.hun==1)ta--;else tb--;4 H# \# ?9 b: z! R& p
            if(pcai.la==1)tc--;else td--;2 Q' L5 B; v& \5 ~  u
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);: R% }8 o8 @& |8 u$ G: E7 d( |3 u
            delete[] myselect;
    1 _- G4 @( q5 a6 s2 l$ A+ |" V        }
    4 }/ [3 l' P2 ~) E1 j7 B    }9 \+ u! {  L" E8 j! l" ~( b) V
    }
    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-6-14 08:22 , Processed in 0.412346 second(s), 55 queries .

    回顶部