QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12145|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    ) {6 |- j, F9 l4 s4 k
    6 R/ K# K$ H: g3 k/ \9 K“午餐饭团“是百度内部参与人数最多的民间组织。 0 b8 u/ g+ r( R
    ! H  f( g  }" E+ ~- ?" k# p
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 + z4 D% I3 `1 Z& \! s) k
    : a7 Y0 s- l" B
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 . e6 X. M. K+ c9 R2 O

    : O1 l+ T9 J( r' d1 u5 j) O% }9 n) H! D但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    " C; g# y4 C2 [1 t7 W1 l6 V) Q! N) w* x7 Q
    饭团点菜的需求如下: : O  B. Q0 a7 t& P2 }2 h
    $ u4 D& p/ |" e( W" T+ |7 c- E
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    8 g- h  a5 C6 r& g+ L; I8 m) C  {) D2 u. Z3 l
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    6 o3 |# z/ g* m
    3 |; o) {3 p. t; o9 }. R: N3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 6 W( p9 L3 i1 @# s" n
    9 @- @, O; h3 I8 \3 s$ |! Y+ c
    输入数据描述如下: ; n6 m& L% E7 k: W
    % u6 c5 E( l) g" M
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 2 }1 W! [6 i- z8 O2 s! R

      `3 a6 W4 B2 N/ @2 o6 o; _紧接着 N 行,每行的格式如下: & N, f6 }. }& I1 Q2 |" f

    & K& P$ _% h$ d" n菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) + s4 C* \! z/ Z: T+ e/ ^

    ) x0 E6 }3 U: r- g例: 0 Z5 O/ j' C# }6 w7 H6 O( b

    , j4 e$ \( w4 M9 Z4 K水煮鱼 30 1 1 , P  H) d; O; }$ y
    7 A2 _* F, c+ t
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    7 F' s4 C" K6 y+ B- n& n* Z' T- E6 |! v- [4 g
    输出数据:
    : U5 Z. |* h* [1 T6 R3 X5 C% K+ G, Q6 E# c+ w: H
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    " P, F. X: p; H- c6 K! e1 ^1 o! {! Y" G, _( L) }
    说明:
    , h7 d  M! S8 N) `; ~/ ^; ]  s& M( e: n: N$ }* U- y
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    2 Q3 q" b1 E3 R% T3 o0 K3 F, S% P7 l7 U- j+ g
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    . E; h& W5 U( N6 F+ b& a$ C  K% y5 z$ D$ g: |8 d# B4 Y) \  a
    输入样例


    7 z3 [/ W  c$ E3 N4 T3 2 2
    ; B9 v# e; X$ Z1 n1 y$ X$ w7 Z/ i3 _9 Y0 a  d% P
    水煮鱼 30 1 1 # `  `' D( }) z. t- Z
    3 [. w3 i% ?6 ^0 ~" b, J3 k. k
    口水鸡 18 1 1
    ; m4 L4 u5 y2 R# O6 G  K7 T# \* K6 h
    清炖豆腐 12 0 0 8 s  }- O6 T6 P. ~) _$ K

    * J# x/ w7 z4 Z/ P1 1 1 1 ! G% i& f5 _! X8 N


    : d2 x' y7 E7 n) o* V& g( o1 L, j: o; `' w% E" u: r. h" r
    输出样例

    ( K2 H' q0 m& n. l
    口水鸡
    . y  Q2 a/ f6 b' `. Y
    9 j$ R7 A4 [* O' w. s; l清炖豆腐
    ' c3 E- x2 E. g  N, J/ I! \4 Y$ e+ ?0 z, e( A) {% O, M# }
    12.00
    ) w: s9 Y8 O: E

    % [6 D. _) d& M1 P& n5 r

    " E$ b& u- D$ T, k  ]) ^2 s0 @' G
    时间要求: 1S 之内 % Q* \5 H/ j4 n. m

    " r& h3 Y& B. G2 D; z8 Q) xexample:
    2 j" a: {$ i% {7 R#include <cstdlib>
      J/ ?, |1 Q% a$ q) q. `#include <iostream>
    * \5 S1 n& T2 i. E. @' B
    + j, n$ k! N- d& |& Nusing namespace std;
    ; E! @6 Z3 _3 s6 ]2 @
    ( o$ z0 I( _- Y5 a4 d" T
    / C9 m7 u' l) w5 Y& u7 a% R; Fstruct cai
    & }5 `- M( ?$ u; S5 r8 h{4 W! Z( U% ~& C2 h, s/ _
           string cainame;
    7 d6 v& m! \7 T7 `4 \1 T       int price;
    : ]; B7 J. e& \' M; X9 N  v) x, X( f5 Y       int hun;2 U8 }( k3 ~5 d' X: ^. Z3 y
           int la;- V4 \# P" C8 \/ M
           };
    - ]! n5 W( B  e4 v* S4 iint* alltotal=new int[30];
    . K7 h1 L( o/ y" b) P' Kint pos=0;
    - J8 Z7 W- K# o% p, H8 G. m) R( ?cai* pcai;
    4 L6 p) E5 e6 O" X; w& @  U" vint N=3;  
    . ]5 f- _0 \9 y* V. j) v: B) xvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    ' m  ]5 D( ]  {3 ]% ~6 aint main(int argc, char *argv[])) g6 N3 l9 p- G- V- {# D
    {" w, }1 ^( i8 P$ c/ p
        int M=2,K=2;
    . D- l1 t: v7 I  ?. ?& L    int a=1,b=1,c=1,d=1;; ~0 R: J. X0 \5 q  z% i. N
        pcai = new cai[N];
    8 D$ O% y$ j" K5 H- }' c% W/ f2 v5 W    pcai[0].cainame="water fish";5 G; |$ S) o  ^" H" D- q1 v) I+ f
        pcai[0].hun=1;' a% z1 J2 L) H9 x  s5 C7 ]
        pcai[0].la=1;: j" v' x3 Z+ z8 e* e
        pcai[0].price=30;) r% L4 b" O8 f: N3 v& b
        pcai[1].cainame="mouth fish";
    ! }; J% ]/ i# b: x    pcai[1].hun=1;
    - A; N6 B. W) W" G: E    pcai[1].la=1;8 A4 S' v7 `/ F5 F  B  O2 h
        pcai[1].price=18;
    ( a8 ]2 _" E5 Z( j    pcai[2].cainame="doufu";
    & w& c; w$ D8 C    pcai[2].hun=0;& p2 F. x9 H5 w# N
        pcai[2].la=0;1 m% p, Q- A* n) @, a
        pcai[2].price=12;
    + Z# q- _" ?4 d    for(int i=0;i<N;i++)
    ( \) r) j! c6 L, [% w% q7 n    {& g. Y0 Z% N' D4 D
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    0 `  Q( m) U+ h) c4 j& v        {
    - h, o) e, j# }- P. v0 H        int ta=a,tb=b,tc=c,td=d;    ; f) C- Q/ z* ]
            int* select=new int[1];    - X; y( |5 S. h
            select[0]=i;" R7 i& L, b6 s
            if(pcai.hun==1)ta--;else tb--;
    & S. O2 X* r8 V/ a/ I( t        if(pcai.la==1)tc--;else td--;. y$ G! V5 w; u
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
    $ r5 C0 v% X1 {4 x2 B# M        delete[] select;
    ( A6 ?  }4 d& B: i* W. A        }. J$ W+ ~9 I5 R6 G+ ]1 c# E' ?. v5 E
        }' @' ?8 h6 e9 q! ?6 `* F8 Q$ m
        for(int i=0;i<pos;i++)& U5 J5 S: w( y$ E$ H) e
        cout<<alltotal<<endl;
    6 n* o, S' g% P7 h$ {/ d: p: v    delete alltotal;: z8 u& Z. y: e
        delete []pcai;
    / A  ~7 [1 k3 ?  b- G3 C0 F    system("PAUSE");
    & E( D% W5 b/ ~6 R2 G% i    return EXIT_SUCCESS;
    . e# V0 {) h8 D$ `: \' d# [' {; i}, \2 q4 h4 b4 c7 O$ b/ G4 q
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)( @" D% ?: K, O5 |  c0 a+ P1 G
    {
    ; P! h% m# c6 ~, n. p# A, J    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;9 K# }: a6 R8 D3 [& g. I8 F9 S
        //getchar();
    ) C1 s% O, Y/ I0 Y. D( ~    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    7 s; ?/ j- z8 a8 ]$ b1 i    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}% S+ K& V3 J+ m: d$ {+ b5 P
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}7 f* d8 K; U4 ~6 i: \) A  Y
        for(int i=select[n-1];i<N;i++)2 _' b; t9 i, B9 Q4 h* g% r
        {. V; Z* W9 p: f) O, l& C9 O
             for(int j=0;j<n;j++)if(select[j]==i)continue;( i+ g- h$ x/ Z- q  L7 m  z- 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))
    ' ^+ f6 \) k" k) `        {# ~- G4 U! u7 e% a$ Z
            int ta=a,tb=b,tc=c,td=d;( b. k7 \; [4 M0 m
            int* myselect=new int[n+1];    ! i' u& \# ~! o9 `
            for(int k=0;k<n;k++)myselect[k]=select[k];
    6 Z; U# l5 K, S: D$ p        myselect[n]=i;
    % I( u1 M+ ~% E9 ?        if(pcai.hun==1)ta--;else tb--;4 z8 G1 X$ z. S/ S5 H& s: k
            if(pcai.la==1)tc--;else td--;
    1 [8 t: g9 ?8 q        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    0 u- j. s  s! h        delete[] myselect;
    $ D/ g. g* q0 y5 F! i! A6 o. c        }6 ^" k9 U/ x9 I6 D3 K. s* E; S
        }* b+ k; k. }  \0 r7 q3 m
    }
    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:46 , Processed in 0.589342 second(s), 55 queries .

    回顶部