QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 11749|回复: 3
打印 上一主题 下一主题

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 |邮箱已经成功绑定
    饭团的烦恼 - C) i# s9 j1 ?. T

    2 J& X- G- }9 h! T“午餐饭团“是百度内部参与人数最多的民间组织。
    5 r* W2 j- G2 y: s
    0 I$ E% Y% P/ h# V; p# }同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 ' @9 D. ~7 P; w2 n, `
      T! D5 w2 b0 z1 L
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    0 V6 p1 o+ d5 t2 Y! t7 g# `
    - j; l! }8 h& q) K0 L# \. c但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 ) \) n$ }! Y; W
    # R3 J& @$ ]& H! Y2 |2 w/ t0 S
    饭团点菜的需求如下: : }. c4 A6 \- O/ r; z! k. I9 F

    9 H9 r. I' D% U) ]& ]3 H! M( W! p1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 7 U* i7 k8 R# |& N8 Y( `
    - l# u! n* ^2 f! q9 K
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    : [9 q0 C  f( K; M8 S$ a; y. p1 S
    ) G6 h" H' K5 i4 W1 S3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 1 S7 `. I2 }3 V- {
    4 T: s6 k  T& P. o
    输入数据描述如下: : P5 U+ q+ T  a) A9 B1 G  D. F! D% [
    4 q! a8 S* r- a9 x5 ^7 Q& y
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 ( r2 o4 e/ D, ]) n: ^

    4 @% q* X% ?. i4 K" a$ Y) N紧接着 N 行,每行的格式如下: ' i* q8 U4 b0 z* c2 W& k

    ) n8 f0 \& v8 R$ I# a3 r1 M& l4 D菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    8 ]: ^+ s3 w' f/ ?& S" h
    2 u' f" `( _- d3 w# z! {例:
    ' h1 [6 b6 h2 G# I+ C' e3 x7 H1 ~3 T0 Q- `" A
    水煮鱼 30 1 1 ; c9 \0 T: ~, H8 D4 V/ b/ K- ]
    , G& Q, V6 I( I! H
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 / l7 B4 y- J+ ^3 m; |
    . ], e- d4 V4 [, P% K1 [% J. |* J
    输出数据:
    8 N4 V9 Q' P8 F: y/ I% S' i( `4 ~8 F3 ^% X  \  B$ Q6 R
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    - f5 P  G; i4 {3 v9 x3 |
    , p' Q5 Z( T# q& {, m6 I6 S3 G# m说明: 4 \+ ^$ q  [& Q; W& r
    + W3 g5 R; X; o$ r# T0 ~1 t
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    ! f) C/ V( q% y* g! W7 S% j
    , R- k5 [$ F  s+ i* |- o" D2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    3 b( g6 }. r# r9 u+ `; X( [) B9 l; `- t9 C: c: E9 u% Z. D
    输入样例


      t7 D7 J/ j" P! {# J3 2 2
    1 U; Y5 i# u" N" N3 p: W' t& m1 i. U2 B
    水煮鱼 30 1 1
    + i+ E8 m. e3 p" Z6 L0 Q8 h
    $ g( y* D4 A& z% x& V4 Q! c, B口水鸡 18 1 1
    . S8 [8 H1 b/ V( H5 y
    . t  C$ _7 r1 R8 X' j% _: ~清炖豆腐 12 0 0
    ) r! q. a; v6 n
    9 q1 }2 F5 z* X6 x* o: L% W1 1 1 1
    - W2 Z6 y5 M& N8 R/ C


    3 C! U* M1 Z- _7 J% F9 M  x* g- y/ m  i+ `! E2 H- q2 q
    输出样例


    ' _3 p& D0 P5 r9 f& @口水鸡 ' D: U7 y# A) f/ l9 ?" b
    : `3 }( L0 W4 P3 I
    清炖豆腐
    7 h! J/ W  z1 O3 c4 p' r+ J0 M  G6 O9 @
    12.00 3 Q$ j# W3 P  @! Q7 P' |2 r


    9 ?; |! O5 S7 J6 e& l: Q
    2 P1 R1 T2 J! c* d) i0 U3 s, O' ]- A+ m+ F* S; l4 d' X$ _9 _
    时间要求: 1S 之内
    ) y. J  w! a+ \. T0 f& C$ @- R0 K) \+ M* a* V6 U2 U, j* l( d
    example:
    + c$ o6 e/ A% m7 j. Z#include <cstdlib>( {- _$ d  S+ I+ u6 A& k. c
    #include <iostream>
    - t* g: d& |. D& S  U0 \6 n
    ) a5 N6 U" p+ h4 V( a6 b9 Musing namespace std;
    - t' y" D8 h$ c' j3 \; R7 M
    - C3 }! ?7 @* E/ T3 N
    + B4 B. l* F0 _2 n( p$ W9 z, Hstruct cai
    ) V! ?+ \* o% V! |{
    2 S; s6 r3 {* I, {       string cainame;
    * X! q4 _" i. y! P0 y       int price;
    ; _: D- }  A  m/ o7 _# o' b       int hun;3 p4 {$ f6 F. p  y7 W9 M
           int la;
    0 K# C& o& x2 u2 f       };
    & U2 f+ |! r7 a0 Uint* alltotal=new int[30];
    " r: {+ U+ H/ Dint pos=0;
    # L8 D( V5 g8 L5 F, ~$ ]cai* pcai; ' N/ N- D( l: u3 g: H, X
    int N=3;  
    ! J, G; q$ D0 c: Pvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    2 M( P3 e6 R4 Q% f& U: @int main(int argc, char *argv[])- \, }0 o7 j4 g5 `: _& e  M- l
    {, v: b! r3 |# A0 o% o, b
        int M=2,K=2;& Z( g6 u7 J+ T9 V# Q  o* M
        int a=1,b=1,c=1,d=1;
    " O% k2 Z5 I! e! S    pcai = new cai[N];. k$ O1 ?; ?$ h) s, P  w4 w
        pcai[0].cainame="water fish";
    9 `7 ]( p+ p' m( ~5 @5 t5 p; M4 Z    pcai[0].hun=1;* Q3 G- I0 X/ I. M* g, O
        pcai[0].la=1;
    0 w9 e; ~' X, @) ~% [    pcai[0].price=30;
    0 L8 ]* _" Q/ O# r. J    pcai[1].cainame="mouth fish";
    - o* y  P: F/ f/ M/ w    pcai[1].hun=1;
    1 }1 W5 m! s. [; }3 M    pcai[1].la=1;% m" o! m/ l+ t% s* u. I
        pcai[1].price=18;
    % b3 V7 |2 P1 N+ m/ m: E- M/ [    pcai[2].cainame="doufu";
    5 [* C9 ]' C4 D! z4 p+ w    pcai[2].hun=0;( M8 y: t$ U/ p% y9 ]. p
        pcai[2].la=0;5 A6 r4 d2 c* ]% ]8 `: {& _9 g
        pcai[2].price=12; % F2 Q$ o6 a- ~& X7 T3 z8 l
        for(int i=0;i<N;i++)
    5 E. J1 h3 L% \- E- {6 j# S    {' w, |. n4 r/ L# f# x. y' O( d
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))3 T+ f1 D' v& [1 V, ]
            {/ k" E4 V0 c3 Y9 l7 F
            int ta=a,tb=b,tc=c,td=d;   
    : K2 Q5 |% U; U# k# w% i8 V8 [        int* select=new int[1];    6 S& E* v% N$ \7 \0 {! S+ Z
            select[0]=i;
      x2 R+ o4 q( i4 O" O        if(pcai.hun==1)ta--;else tb--;
    % l2 O, n. i0 e' P" y        if(pcai.la==1)tc--;else td--;+ N9 h6 o5 O2 M  o. [: }) A
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
    " q& ~, L6 Y; q  w: W+ ^        delete[] select;! C1 B1 `5 x3 Z% o
            }
      J8 o2 c! Z4 z* [& l: h    }
    ' v4 l: }5 c4 y  |    for(int i=0;i<pos;i++)
    2 b4 G  r, Z& O1 _# X& Z' X    cout<<alltotal<<endl;/ g" F3 u4 ?& Z
        delete alltotal;- \/ ]/ J9 A+ H5 N
        delete []pcai;- Q4 E: {9 H" `/ C9 t
        system("PAUSE");% |5 H: Z: `' `! B2 _
        return EXIT_SUCCESS;
    8 s( O: }$ p  z4 {4 m9 @}: r1 l, U- {' I: X  w% I
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)( _- P- I1 ~$ J) q0 q4 b6 N) l) T0 O
    {
    / t1 d0 H+ ~% ]) Q    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    # {0 r4 _0 z. m3 H3 d& o: G    //getchar();
    1 t1 X7 R- }% w, b2 G& r    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    ( ^/ g# m' y. y    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}3 \) A( ?9 M, A, ^
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}# c/ B, u9 w6 y4 O6 m
        for(int i=select[n-1];i<N;i++)' I5 r6 n5 ^2 k: h3 k. f
        {- h. c$ v- n: A. `
             for(int j=0;j<n;j++)if(select[j]==i)continue;  Q, `. z7 }. s; h* k1 [( C6 J
            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 x$ k3 f( a5 }6 p
            {
    3 a: g5 Y8 q1 K; w        int ta=a,tb=b,tc=c,td=d;
    # F! a* @- Q. m9 ?        int* myselect=new int[n+1];   
    & ]3 k0 B1 y' N# [, ]- y3 v        for(int k=0;k<n;k++)myselect[k]=select[k];: f; q7 y) m* O
            myselect[n]=i;; S7 D) q9 r  m) `% d
            if(pcai.hun==1)ta--;else tb--;; F; Q: G$ N* p& `  E! z4 A* Y$ z
            if(pcai.la==1)tc--;else td--;3 m+ _" e: z. H3 i  c8 f
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);$ K0 x9 p, ~( L$ o8 g' g$ G  x9 K
            delete[] myselect;6 X: n) o* E$ i- o9 z. Z6 u% j
            }' D3 I8 ?) ~# V' s8 @
        }+ K, ~4 V; w; {3 ~- Z
    }
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    928171481        

    2

    主题

    6

    听众

    34

    积分

    升级  30.53%

    该用户从未签到

    回复

    使用道具 举报

    3#
    无效楼层,该帖已经被删除
    4#
    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-11 22:41 , Processed in 0.537647 second(s), 66 queries .

    回顶部