QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12345|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    2 F, v( m7 A7 @# n. s1 R; N5 Q1 o) S" X0 b+ Q2 a
    “午餐饭团“是百度内部参与人数最多的民间组织。
    ! c' p9 h3 D, `3 d7 z, C' W  x- w8 J. j5 |% h
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 + }, I6 ], @5 n! p9 H
    ) d* a, ^4 e2 j9 V  d
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    " @6 F% f1 b! X8 w8 N2 g. w5 o- s$ l1 u& {" ?: m( ~8 V
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 / i6 L: t8 v  F0 J7 F+ `2 [! w* i
    , n# J" O2 D# _. A
    饭团点菜的需求如下:
    ; H6 u8 M0 T' O
    5 b" h. Z5 E; }7 ~1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 & x3 ~/ U1 M4 ]& g$ W5 h
    8 {  l5 m* |5 C* N
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    ; N2 c( Q9 t8 h: K4 A/ Q5 Y- }
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 , g  @+ z7 `! t5 k, y% F# v" J
    / u# W" N0 J8 B& W& N5 D! _
    输入数据描述如下: - |5 q; ]2 J5 b9 X  k

    ; |: M2 J8 d; m2 b( I第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    # Z: b5 j1 u% A3 f4 I" T# o& \- c6 s/ `% C
    紧接着 N 行,每行的格式如下: ; H4 _9 j+ t2 U* e; C8 \2 t, z
    6 S- h* ]8 V( l8 y% U5 ^2 {/ c
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 0 W3 V  }. s: {  o$ B2 G( h2 m" ?" Y
    . X+ D+ M& L; B/ s0 y' c# R
    例:
    2 |9 D6 L7 p; r# P) f4 w4 S& O' W& O" L7 U3 G* _
    水煮鱼 30 1 1
    ) B  \5 t) g! L
    . H& L+ A- p9 o/ k7 _紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 1 ~' ]2 w. B0 q; |  H, ^
    9 `4 u$ c) X& q- c; X$ b! Y$ }9 B9 p
    输出数据:
    0 l: o1 Z0 P3 P4 w: o0 }9 T% J0 g) ], L( k9 j8 A
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 $ W* A. Q" U! E. @" o* G
    ; t$ W; X1 B& u
    说明: ; c/ B8 z5 ]& U& N+ j
    2 S% b3 F( Q2 M1 ?3 H
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    0 B5 z; a$ P; Y* ^5 H- ~
    ) n  a& Z5 t3 X6 J  h1 Y( h& k2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 & O1 m  c: u* q8 T' E
    2 T4 o) I2 }1 G% e9 H8 Z9 T6 t
    输入样例

    1 Q) `' u$ E6 q+ [
    3 2 2
    ' d6 H: d$ c2 p
    7 |, r) G2 u. c8 T, j3 ~, z" E# |水煮鱼 30 1 1
    ' y; l) ^; d; ^9 z
    7 J/ V: P9 q8 n: R6 J$ ]! a4 p" q口水鸡 18 1 1
    & Q) T$ R! E$ T3 b& K0 r. L$ b8 r( r1 E8 u; h3 i$ b% y- J" E
    清炖豆腐 12 0 0
    # T& |* r7 ]* q4 X) T2 g" b( I/ W$ y& w1 u4 z$ X  g  K
    1 1 1 1
    4 o. }# O7 y/ \: j

    ; w5 y+ G" |. p1 d9 B& C
    # _0 p2 _' Y+ _/ I4 l/ V) a
    输出样例


    - x' ~1 J& M" Q' V- r口水鸡 5 x" ?' x7 ?7 D2 f4 L

    7 K1 g9 s9 W* B' K清炖豆腐
    5 O- Z: l9 K  X7 n' {$ F: k5 o
    ; y2 M7 r# o6 S3 m12.00
    0 j, a, q- B3 h0 L5 o& J+ u


    ; U% i6 E4 y% f: t( Q/ b; d$ L1 k5 j7 Q$ X" A
    % [, Z# `* Y. @* o- L! j; e
    时间要求: 1S 之内 3 D. \2 E4 J4 c' ]/ [$ ^5 }$ U
      @8 V& t- Q! }* _& S, M7 c
    example:, P# I2 F( ]- T" x
    #include <cstdlib>5 K8 ?- m$ a5 V  f. ^- J# ?5 i
    #include <iostream>8 r4 V% ?. ?1 a$ {. P# z4 ?9 X
    & v  s8 A% R+ h
    using namespace std;% M8 N5 Q" X) N2 ?$ [

    + a, G# Z) L1 h6 ]; e5 M: n1 b# N% M( `. |+ p
    struct cai
    # t  v  W7 m9 T% t$ M{
    7 l# q6 ^/ F* a' y* @, Q. Y& p" H- B       string cainame;# S6 B% p5 d$ T8 }0 O3 [) G
           int price;
    8 z+ Q' |2 O9 C0 w" i2 a       int hun;
    # w1 f# T" _5 H       int la;5 ~# _; z* Z- z3 P/ [+ V3 [
           };
    . D' O" |/ q  O9 p- b' h* Uint* alltotal=new int[30];
    $ \" k+ F- u" E; |int pos=0;
    " H( |# D& F) I( O4 z$ a, c8 `cai* pcai; 1 p+ {. t7 v8 w* G6 l0 t) R! _
    int N=3;  ; \4 O* X8 [) H9 q
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    % p( e, g7 @3 P' _& a5 g: Rint main(int argc, char *argv[])6 W5 p2 Z: U; F, i! B
    {7 z" B$ @" [; r: j. L: ~* J) [
        int M=2,K=2;  k# ^0 w/ [6 P* T4 g, l  {
        int a=1,b=1,c=1,d=1;0 h5 D* L6 n# ^# I+ e
        pcai = new cai[N];
    6 x! H& L$ z2 c6 y9 |: M. {( h    pcai[0].cainame="water fish";
    3 f( D! A( w6 y) _. A# v: g    pcai[0].hun=1;9 q4 E2 T8 U* X8 a
        pcai[0].la=1;5 r/ ^2 h$ @) D( q5 N3 z; t
        pcai[0].price=30;  m' U% A& w+ z/ n% [
        pcai[1].cainame="mouth fish";
    & a( O6 S1 p7 w5 ]3 G    pcai[1].hun=1;
    7 ~  w) }2 i9 O( u- P    pcai[1].la=1;2 v0 ~$ U. a$ A" I) _5 `; S
        pcai[1].price=18; ' k2 `# O& e; h6 h
        pcai[2].cainame="doufu";$ S8 {. e! S% l8 N
        pcai[2].hun=0;
    4 }7 [) {1 G/ N2 z2 b9 D    pcai[2].la=0;
    3 J- ^% G1 c9 r" |2 e    pcai[2].price=12;
    * k  v% H5 J) l7 U5 g% L    for(int i=0;i<N;i++)# ~2 c+ C9 z  B+ m/ \- o* j  V
        {2 ?$ |8 N, {+ u
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0)). t" I/ g" G2 f7 W1 a
            {
    : k1 {6 `+ k0 _8 d, S  V+ o        int ta=a,tb=b,tc=c,td=d;   
    % f/ D6 k( Q9 ~, M0 l0 ^: ]* {0 m        int* select=new int[1];    ! u# c0 \! a+ Q4 U( r+ ?( y% [
            select[0]=i;
    / B, E. W% F4 o! G3 x+ y% s        if(pcai.hun==1)ta--;else tb--;
    & L, T* m+ H' B8 e+ z8 a        if(pcai.la==1)tc--;else td--;
    9 W7 r* p# j! D# X3 Q( N+ ]        fun(select,1,M-1,ta,tb,tc,td,pcai.price);* a4 ^' V. t  H8 ~* U- h3 e! f
            delete[] select;
    ! r8 A* \& E3 N. P9 Q4 o! N: R, u        }
    2 p* k2 [5 i' ~2 V/ K    }0 @0 ]) Y% X$ H! j+ a
        for(int i=0;i<pos;i++)
    % d- j! B- N$ T! j. i    cout<<alltotal<<endl;  S, m3 f* f0 ?& ^0 _6 B
        delete alltotal;
    0 n, N9 ]( M/ B& z5 z    delete []pcai;
    # C8 H4 Q! x, U; i+ n. ^    system("PAUSE");
    " {$ G8 \/ I( r$ ~8 i1 ~+ B/ ~    return EXIT_SUCCESS;* Q0 R+ O% g% K
    }
    & v9 J& F) W# R/ {8 x8 w3 yvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    5 W$ e5 I1 ~% |/ x: F5 L1 x{
    / \$ I! `/ l2 c# C* e! ^. U    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    ) M9 p% k9 l& Y! \" Z5 A) s    //getchar();
    6 R' {, B9 N2 B    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;( e6 m$ l+ d+ ~; ^8 M
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}4 A6 g6 z6 t/ P7 t* U
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}; L- c. |" U. D$ }+ [
        for(int i=select[n-1];i<N;i++)& x4 t+ I( q1 L, y! s
        {' _& f" Q3 d9 m
             for(int j=0;j<n;j++)if(select[j]==i)continue;
    + V' ^. p" q- C+ i        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))
    6 k. ^) W+ @, Y; d/ Z        {
    % q4 D2 s% }: T& W        int ta=a,tb=b,tc=c,td=d;
    7 F+ d: @6 V  _  K) Y        int* myselect=new int[n+1];   
    . Z" H) ?6 K, d8 a  z: I. E        for(int k=0;k<n;k++)myselect[k]=select[k];8 g4 ~: a% V; d
            myselect[n]=i;
    ; R7 X* m  ]8 P9 F3 m        if(pcai.hun==1)ta--;else tb--;8 m+ m& p5 f! ?, M8 R
            if(pcai.la==1)tc--;else td--;( t2 u  {8 o" ~4 r9 N- N5 b
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    % X! L$ L4 k  j. G2 @        delete[] myselect;- |) F- p8 H) y3 P
            }/ `& N. A' l9 X7 z3 j, t: _/ K
        }7 H1 t, G' t2 w8 o
    }
    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-29 03:19 , Processed in 0.438817 second(s), 56 queries .

    回顶部