QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12415|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    0 i3 q& ^; I" \. r: t7 ]* {' \2 q4 c
    “午餐饭团“是百度内部参与人数最多的民间组织。
    . T) L) S( F& _" |$ H6 |4 f& f6 L% A2 W$ D
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 0 q% B! N7 Y9 j6 U( g( k2 U
    9 Q/ g) X$ T0 J8 v" q2 U" w
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    + o% B9 b, Y8 {, l4 ~& X5 j7 d5 j, m2 j& A2 X! W8 N1 A
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    4 Y- X0 W: Q. @; E9 k; S. r0 P
    2 O3 l+ [" M, z4 V+ E# g饭团点菜的需求如下: / H- R  P8 o4 ~8 a' Y% U2 y
    , _! i9 \0 X2 @6 s' O/ E
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 ; v$ ]: V5 p$ d- L  ?
    % U: e7 k) m8 d: W  B5 T% O
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 ; B* R: q1 _- T& O2 l
    0 w  l$ D% q, M5 n4 p% t
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 ) F5 l2 g; u) d6 k: f
    : k7 u5 t( }/ c5 o9 X
    输入数据描述如下: * d, w5 w" m- X# P2 j  L

    * F0 Q/ W4 C3 u" x第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 5 O1 W3 P3 q4 l3 M" X$ W: X

    * ^# p5 X! P+ Z" L. i- l8 M3 @3 v紧接着 N 行,每行的格式如下: - e. `. E, C% a+ B2 a
    0 S6 M8 t2 b' W( _1 c2 M$ x2 W2 i
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    ! S( u# x# d* ~+ O2 ^  `& [2 `  G, K" U* I; Q5 C
    例:
    , c) f- E/ v- @  G4 v& [9 I2 k4 P% n. A8 i0 j
    水煮鱼 30 1 1
    ) M! [* {7 s  O% P. }+ ~& N* {+ k- F# ~) }
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    4 S3 h5 K- `( w6 R
    * N7 H' K" t( }5 I9 @, ]# {输出数据:
    : G& y; X! g5 L8 H  d2 C' p: |% {0 `6 b
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 8 Y1 q. p& v) R7 i# I  ?! m: Y4 C

    # ?' o2 l) p. t说明: 6 k+ {/ `" i8 _3 N' v# F5 i

    2 z+ O5 [; k& Q8 X8 A- r1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    % w: b8 H9 X% E! @! R; G3 o4 T2 j' t) T0 T4 A1 D1 Z
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    / x* q2 V& u- P7 K" \9 k4 R0 i' U8 G1 D1 g# @( `
    输入样例


    ' S3 W% a& S- h& r# Q9 X( U- K3 G3 2 2 8 v0 ]4 X7 ~7 l5 J/ O

      {, L, ?1 g! N; \水煮鱼 30 1 1
      Q. m  K2 D. i4 o. K( a
    # ~* i1 U: H" y7 X# M口水鸡 18 1 1 7 q" w) K3 H5 ~1 }2 q
    " Z  `5 t& Z: j. Z1 t
    清炖豆腐 12 0 0
    4 \& U8 [8 T: t6 f5 b" r, j, Z# {+ U4 {$ U2 x
    1 1 1 1
    : C, E! G' A7 s: u


    # H6 b4 J% m* F" U/ O; `$ L' W* u1 N# _- H/ m
    输出样例

    " u; N4 i+ q( d4 b  D
    口水鸡
    & H: j+ l! x# ~
    9 t) s1 \% x$ E. f, N9 G2 O8 V清炖豆腐 1 W0 @( D6 l4 `9 Z8 l

    # j! C! A% C$ h8 Z0 Z12.00
    . Q1 m. t- E/ Z1 a; A" Z


    7 a3 W+ R8 b2 t3 X/ W- F% U; y3 J6 _3 Y+ H  Z% j

    3 y9 [+ F5 A* Q% E时间要求: 1S 之内 & F# k6 U4 y1 q/ H
    + [3 b% F5 l. o: j* m
    example:
    4 t( m" Q3 A. H2 E: V#include <cstdlib>; `) D2 e0 }- m' ^5 c+ G* c
    #include <iostream>
    ) Z6 j1 x7 M- N+ z! X+ l0 ?/ U! }" L: ~' ?
    using namespace std;
    8 {. i% ~8 L5 C$ X: ~
    - M$ d1 ]$ |$ L% h4 V( ?" Y8 C! y  E+ m7 {& s3 x. ^# G
    struct cai
    $ |( F! H. F% K# o2 _8 E! w  Q, M: m{) c/ U1 T' p8 o9 k
           string cainame;) V# G6 M+ i1 c; N! R% b8 d
           int price;( q& \9 p) H+ A7 j
           int hun;
    * O; I& J5 w. Q% F! e       int la;
    3 _4 I7 `, U7 k  V# F/ ^8 W       };
    % I# P1 e# S1 @9 z4 D* @, |int* alltotal=new int[30];9 B. [* _) A* F# O0 M7 B( L
    int pos=0;
    1 U8 }- Q$ b. q8 tcai* pcai; 6 |$ d$ g6 V1 i: u- F
    int N=3;  
      h  ~$ }9 E1 [void fun(int * select,int n,int M,int a,int b,int c,int d,int total);( B7 W5 r; l/ _1 P1 b  t
    int main(int argc, char *argv[])7 p% J4 D, o' m
    {4 q# ^  f8 d1 b/ E; B
        int M=2,K=2;
      d3 f; @% K* `( F, D    int a=1,b=1,c=1,d=1;
    ( T' j, }7 ~/ b9 ]# _    pcai = new cai[N];! ?  i" u4 ?5 U6 q* Z
        pcai[0].cainame="water fish";
    . E' _( `8 o" R" X8 k    pcai[0].hun=1;
    1 S6 E. z5 C: T! u# `, ^: V& E& W1 e    pcai[0].la=1;
    ) O( }: f) F* D9 L: |: |( Y2 s    pcai[0].price=30;  ]) H* e5 s: {% p, a
        pcai[1].cainame="mouth fish";
    5 w( b: Y  i0 G* V& y4 b8 O7 g  R    pcai[1].hun=1;
    " Q4 W7 F" [; ^9 P    pcai[1].la=1;0 S1 X: B  @9 v5 W
        pcai[1].price=18;
    # T0 `" e& U9 X& _    pcai[2].cainame="doufu";: d! O( I* f6 Z* ]  _: J( s
        pcai[2].hun=0;
    0 C: Y2 v- B4 U    pcai[2].la=0;' ?' g/ T/ o: A8 a
        pcai[2].price=12; ! U7 G! Q# [" w, ?% b" i$ Y
        for(int i=0;i<N;i++)
    ( Z% G! M4 F8 e, s( o4 w) Q3 A    {
    - l: q  g, t( _5 W& c        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    $ z& b( g7 J* ?) {( t2 K8 e& D        {: t" f* @7 E9 c% ^
            int ta=a,tb=b,tc=c,td=d;    * K7 T" ^) ~; W. d, Y8 ^
            int* select=new int[1];    . v$ i9 H, V' I
            select[0]=i;
    % U4 L, \" c0 z9 [        if(pcai.hun==1)ta--;else tb--;" G+ _1 P  d; W  I5 {0 t5 u
            if(pcai.la==1)tc--;else td--;) N, O: A# }) r  u" o/ p* ~; B
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);7 I0 J8 t3 u& k7 l& c; T, _
            delete[] select;
    - H0 k: }4 W4 q6 m) }8 E        }& d/ k( g& o9 T6 V4 J7 D
        }
    % M  d# _0 A- F' P: Q# W; j    for(int i=0;i<pos;i++)8 H5 l* H, d: d8 e
        cout<<alltotal<<endl;
    ( z9 }: g  w) x5 a6 Y) e    delete alltotal;
    & d) O8 P1 h. p$ ?    delete []pcai;! ?0 t3 c# K6 N2 r0 U- R- ]& \" D
        system("PAUSE");) l- o" l+ p& Z" F
        return EXIT_SUCCESS;
    & F0 k: S" G  x7 V9 d}
    - g0 ^0 B! F2 F, `. y; u0 Z& svoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ) f+ f! h# l5 `. F- [0 D% c7 O{
    + C, M3 y" _( w# S    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    ! g4 S. H3 e! s. j* n    //getchar();: G) m& P5 J6 t$ d" L. t
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;( {& `) V6 ?! D
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    - B4 \" k: s4 [/ J7 G# b3 }    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}* n' r2 H- A2 d& u+ i% O) Q/ Z1 M
        for(int i=select[n-1];i<N;i++)
    4 p2 a5 a. E$ ]7 F* x    {
    ; X- b* c3 T6 G* B         for(int j=0;j<n;j++)if(select[j]==i)continue;
    2 X. }3 W& y7 t+ h0 C  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))( T. p% ]" \: J4 ^( H" g
            {
    & }% x: T% r8 M        int ta=a,tb=b,tc=c,td=d;
    3 I7 U$ d/ H$ [5 _        int* myselect=new int[n+1];    ( f/ N) y  n  J' }1 @
            for(int k=0;k<n;k++)myselect[k]=select[k];0 I4 {- E+ Y. y
            myselect[n]=i;
    1 W/ p/ Q) _# T& g2 n+ L        if(pcai.hun==1)ta--;else tb--;! h/ ~0 g3 p' ~/ a8 D& i- R" F4 ^
            if(pcai.la==1)tc--;else td--;3 g! P) w. n0 ]( B
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);" v! L; }0 L- O+ p2 L/ m! x
            delete[] myselect;
    ; |/ [9 ~4 U+ o$ h3 y3 u        }
    & ^* o% I& x9 O4 A, n+ Q& p    }% u5 B8 E, t* x2 ], R4 q6 ]
    }
    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 17:04 , Processed in 0.440018 second(s), 56 queries .

    回顶部