QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12147|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    . L2 ?% T# }# V5 a. _7 z' A8 Y! V0 X8 y: k
    “午餐饭团“是百度内部参与人数最多的民间组织。
    3 K  c& P. s9 k$ L; @: m$ b5 U$ q  Q* j# {2 ]' o+ ^; r3 U6 k
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    & d+ m5 Z  P( ~* D* o, k
    1 \9 q$ p: a$ S6 r1 b, L- s参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    # _% K; j6 @+ @* E4 i2 P& G8 W$ G6 s( K0 ?$ s
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 ' v* {" i- R& M& }

    3 q' b% m" u. T; K饭团点菜的需求如下:
    ) D/ L/ Y1 m# D! A: i# D8 `$ W) ?' l- f. E7 v' d
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 0 _' e6 E' ~3 j) o

    ) C7 a& k( x$ s. I; ]7 e: ^2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    / O% `2 C% U- [$ ~8 j+ d8 F" t8 i; h% s9 b  r
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    + ^; X5 \! h+ Z9 Z3 k- P/ o% N5 B# R0 x
    输入数据描述如下: & _, C* k) x/ }/ p6 m$ C( o* D- V
    # k3 q$ x/ B3 f; D
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 5 _; s" f8 m% K" n+ h" g

    : ]2 F, v9 F6 ?$ N紧接着 N 行,每行的格式如下:
    ' ~$ O; @8 j0 ~0 V4 F* c: R# x/ X4 Z+ w* k" V5 w
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) * ?" N9 U) W8 x7 f$ J' [( u- u( ^& H2 @
    $ B0 _8 A" q7 W: ^3 N% b8 K5 ~
    例: * F! @6 x" E/ J3 w( C% U

    . L& m2 z3 h; Y% {9 {水煮鱼 30 1 1 & `% ~; _( M, ^+ P* v

    3 m+ X  _+ u" E& O紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    3 u# c7 H+ T$ ^  p) N! @( C
    ! a3 B+ p+ h& o2 F& k输出数据:
    4 U* `" H& X3 L# Q
    * p) [3 S* a7 D, Y; r6 d对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    $ z' [6 l8 i3 o- _' ~. K" t3 ]7 [- E" G( h& k6 t
    说明: 9 C- t9 a7 B$ V+ n
    & L) U0 S- C' n6 Y
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 ! R* g# J) K+ Y9 Z- y1 M" @- a

    4 D; P1 [# J8 c/ \7 Q2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 7 @: u* e" X2 y8 ^; ^' ^( [; r

    ; `; V- b# r& X# A输入样例


    + F0 O) o' G/ d1 l  X3 2 2 ( N1 k* n" X+ j/ r) {2 ^% ?& v
    1 h$ Z" K" \8 w9 x( I4 Z$ s
    水煮鱼 30 1 1
    # @4 G7 m8 q; m; g$ T% D! a# L9 W! r; a- W% w
    口水鸡 18 1 1 ; ~0 X; O* y7 {/ c0 F! a

    6 i- {1 s+ x. `1 A8 V- f- N+ H清炖豆腐 12 0 0
    . V& b. ~) ^5 T" k% C) P% `; B  f# i; ?+ ~* m9 P2 V
    1 1 1 1
    ) G0 m4 p! C+ \9 V& D- c


    / y. P* d$ x$ [+ r+ L* R+ ~) ]) j4 N6 y& ^9 H
    输出样例

    / k+ Q4 f& B9 K, ?
    口水鸡 & ^, r5 T1 V( S4 U4 m* z+ z: h
    $ P0 _$ A/ [$ ^8 m1 `
    清炖豆腐
    ' ~& {) g$ |/ G3 d  N
    $ |+ C) h/ `: G2 B7 ]  T* X( O9 B12.00
    6 \" @* V. O9 @


    3 d" R% P: f+ ~7 c8 u7 p. Z0 O# p% U
    & l1 t+ g; \  D: u& i7 k7 p. V5 h( f9 \( _
    时间要求: 1S 之内 # _7 M% A+ T8 r; F+ D2 b

    ) M. w4 e9 `3 |  E" L) uexample:2 x& Y+ s0 f/ h2 w! [
    #include <cstdlib>( R8 \" N+ q: z+ v) ^( K% C* M
    #include <iostream>
    9 `) J! O9 T0 R$ F- F! l. R5 N4 G9 N# q7 b- x% Q. S9 @/ E0 ?1 w
    using namespace std;; l, U8 c7 o+ M" _) U

    0 e9 Y* z1 {# d6 u( ^. c1 y6 k6 A1 y) }  f# s2 N& }! u
    struct cai
      H+ t  ?6 ]% f5 r3 ^{
    9 a2 R; h7 l, d' G) Z       string cainame;# t1 v, N( }/ d* J9 ~7 Z
           int price;
    : A/ @8 ~1 u: A$ |9 a3 h. R, c       int hun;& A3 L3 [4 S! L. r- D! @# \3 p
           int la;( Z) ]) m+ R5 P4 W8 P; Z5 c. [
           };" e. F6 a" ?! g( O& A  H+ ?0 M
    int* alltotal=new int[30];; F1 O% W. g& L
    int pos=0;. V* Z8 `* Y( U' G
    cai* pcai; ' E" c3 M, o% O0 {
    int N=3;  $ g% Y0 c: k8 W" F: W* h) V4 l5 {
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total);1 y4 B- h6 e3 E' l
    int main(int argc, char *argv[]); M- |2 A* a3 L8 G
    {( ~9 t" m5 D  C! z  @
        int M=2,K=2;
    9 j$ M; k; P7 Q4 Q& G& S    int a=1,b=1,c=1,d=1;3 M2 T- d9 S8 @  u5 ~& b( M4 a
        pcai = new cai[N];" o+ o& U4 l/ F6 w* y# e/ T+ t! A
        pcai[0].cainame="water fish";
    3 J8 q4 G- p1 q/ U5 ^0 `    pcai[0].hun=1;
    ; j2 V9 Y# Q" Y. u' D7 R, W    pcai[0].la=1;) B1 F0 P, F# \- O4 D+ S, B. S" o
        pcai[0].price=30;+ O- m) N7 t4 ^7 I
        pcai[1].cainame="mouth fish";
    ; y2 X* `2 J" ~* }    pcai[1].hun=1;- o' ], i+ V0 q( x5 a
        pcai[1].la=1;
    - u) g+ T6 s" i& ?# u  S3 T    pcai[1].price=18;
    * Q& j- M# y8 b) J  M1 Q    pcai[2].cainame="doufu";' ?& u: D& v  L7 b6 h5 b
        pcai[2].hun=0;2 N, t7 [+ d$ _5 O, |& {7 r
        pcai[2].la=0;
    ( A6 t- t4 T! y- W% w    pcai[2].price=12;
    6 t' f3 r# h: y; M8 b5 Z    for(int i=0;i<N;i++)
    9 X! o# R8 }( h( @2 N, y  M    {) c6 u3 V" e; t5 `) s2 i6 b
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))/ \* _4 u) A7 {* W* Y* d
            {8 W6 `) _' J* b2 R0 }# [
            int ta=a,tb=b,tc=c,td=d;    " j+ v) P$ v' p* ^
            int* select=new int[1];    ( R  t5 F6 H  e$ J- j& Z
            select[0]=i;' S2 W+ ~# ?( S/ d
            if(pcai.hun==1)ta--;else tb--;
    1 C; Z) s+ n/ a' @0 H9 R8 Y        if(pcai.la==1)tc--;else td--;( d0 F) H+ R3 [! x$ e* w
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
      G1 \9 K% c% r        delete[] select;3 W0 C' I/ T# E
            }4 v, A) ^) L/ A. W+ W
        }
    $ y5 {  |$ h6 a. i# h" }    for(int i=0;i<pos;i++)
    * n1 ?+ L2 p# t0 Z% P: {    cout<<alltotal<<endl;" A& c' \' \! ~; C
        delete alltotal;
    ( x, s' l0 |( f2 k    delete []pcai;" n: {2 D% X9 A& J) k( d
        system("PAUSE");9 q9 I  o* I% J  X, t2 E1 t- |
        return EXIT_SUCCESS;5 n1 G/ ]# z) m. Z8 T# Z6 s
    }
    ! S) k) D& F: s) ]( {void fun(int * select,int n,int M,int a,int b,int c,int d,int total)/ N$ f. e/ f4 E- l  r
    {
    2 A5 A9 R8 q. S1 G    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    " W6 f* r5 K4 W- V' o1 K) S    //getchar();
    . t2 E0 {/ D/ |3 D3 }, _$ y    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    $ n; i( r* v: M* A# a8 v' p7 F% g- h    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}, d3 D5 N7 ~, u1 `
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}! w0 Q* J5 `. X5 N" Y
        for(int i=select[n-1];i<N;i++)
    + j  S3 Y1 F! T$ Q5 R    {
    7 `: T* d( ~7 a* {* Z7 k. v         for(int j=0;j<n;j++)if(select[j]==i)continue;
    " K6 i; y! l0 I# 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))9 G) c: E9 {$ q6 E6 E7 o  Q8 N  P
            {2 b2 G) v. S; s
            int ta=a,tb=b,tc=c,td=d;5 A: L: J% |7 F6 W- W
            int* myselect=new int[n+1];    ! D6 q% u' j; c  S
            for(int k=0;k<n;k++)myselect[k]=select[k];- \  z5 ]# _9 u  V
            myselect[n]=i;: t7 Z, u" [6 S7 A6 I2 e
            if(pcai.hun==1)ta--;else tb--;. i  g+ o/ O" F0 [: A
            if(pcai.la==1)tc--;else td--;
    # O& q8 j8 z/ _7 p" w        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    4 p: B2 S: u. H        delete[] myselect;
    5 B& s( B1 J4 k3 ]: e5 @        }) F* k4 S8 Y: ?; w8 Q+ H: T
        }# k9 A0 n1 ?! C1 D* }4 v0 L4 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, 2025-11-8 23:47 , Processed in 0.380902 second(s), 56 queries .

    回顶部