QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12410|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    - X* y1 ^0 ]9 X: H! R
    1 D* W6 L% T8 U/ s“午餐饭团“是百度内部参与人数最多的民间组织。
    " `9 K3 _4 A7 x: z# B% q
    % ^; w# F3 l2 T8 l) n! T同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 5 b7 e/ k4 R3 f3 F+ a5 m
    3 k* ]" v1 H9 I' ?1 F
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 4 B% _8 n, Y, G+ f4 N* E5 @. _5 P

    1 Z/ V2 U! _% d/ T: M但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 7 F( k$ J3 [2 J) d' b
    & N6 t9 k- i& W& m% Y' n4 j" y8 u
    饭团点菜的需求如下: 6 V5 U4 }- z1 O' L  P

    $ P2 J7 y1 U" [) n$ y: g( v6 k  W6 s( n. k1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    , J/ @. L0 z$ [+ f
    7 r; L' M8 W# ~; O2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 % @5 _# E: ~& `7 }; F
    3 [  V+ w9 w2 W+ p
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
      r: B. i! y) E
    8 ?: @; u4 x* K! p* J4 ?7 i' W, m9 v输入数据描述如下:
    3 N5 l; [3 z; _: \  [( k1 E
    2 r6 P6 f+ n3 C8 L: @/ K3 K第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    $ K; `- J! i  Z4 L. v* C1 |) B- i  d
    6 q& h4 r5 J8 Q8 K1 P5 c& K紧接着 N 行,每行的格式如下:
    - v4 v* H6 c! q% _0 b4 g: N! ^
    / y0 ]2 w; T  m, j. R菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 6 q9 `: T* N2 X$ X
    / r' H: E0 |: a( D5 l, |
    例:
    . @8 L( V5 m% i0 c% |* G2 [
    7 Z0 f6 V% }! d' H( v水煮鱼 30 1 1   f: L$ k- L9 r0 |

    * A$ ~" F8 C8 M) i( D# ~紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    # S9 L! g, u) o6 l8 o% U. N( [
    ! ~  t* A. ?- S9 `% d% R输出数据: % ~( c- s# q  ]$ z" t
    ! G, M" ^5 T6 w- f+ ?$ T9 w
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 7 c6 ~! _. ~5 t9 x

    / x0 m. \' [3 ~# M# F6 \说明: % g: `2 B( W( u+ e

    6 K1 p! l" C9 R9 p3 P; B1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 7 K! C0 a6 m+ S6 M
      M4 L/ r0 y4 r: P2 P
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    2 ]+ P/ o5 n0 d  u' a; u
    , a, T- z# A1 p! n. {) S输入样例


    8 n* \" ~5 X, ~" x+ V5 t& }, B3 2 2
    7 f5 E& P# _5 Q$ |( J
    0 V* U( j( I! T- T" p' J3 [0 ?; j水煮鱼 30 1 1
    0 p4 }. b. X3 }4 R. ]$ m, B$ ~' l0 H; j1 \, H
    口水鸡 18 1 1
    1 B' v3 s8 d$ P; _" _2 j
    " Q  z% r  B  Z$ J8 j* Q" d& F. J清炖豆腐 12 0 0
      P: F# |# T# W4 m- F
    - K1 {" f6 G$ T/ b( V( n: l$ d" j1 1 1 1 ) o1 X7 G; @0 A8 a( B+ u3 F- S9 J

    / [$ e/ J$ f, j1 T: T
    0 A; f6 t3 H; {+ {+ M2 b, L
    输出样例


    % e0 Q# t9 G* _! g% D; D% q口水鸡
    : i8 V% O" ^% J+ o& _4 L+ h( v
    * t2 I7 l8 K& r7 x) p清炖豆腐 2 Z  \1 i' N1 h
    1 L( N7 u, t1 z
    12.00
    " |& x7 a$ w0 Z0 t) i4 n


    % _- G' q: c1 O6 Y, }# ?( I# @1 c  w  F% o" r4 b
    ; f! t3 m1 x  k
    时间要求: 1S 之内
    " t( m/ g+ A- h* b! Q, U( r1 ?  M) Z' [# V: H5 S6 [
    example:  [0 c1 Q0 K) w  {: q0 y# E
    #include <cstdlib>
    . Y& {$ ~) H4 N- ]. S# B! p#include <iostream># I/ W+ s/ T7 e7 a% H3 Q6 L% ]% |

    ( f: q9 b$ R* c) x$ }using namespace std;- s1 {4 b! D8 J( H; ~: D" B

    * _. e$ x( |4 {, e$ M: p* F6 Q' ]; A% _1 r
    struct cai# x% c4 n( E8 M
    {: F/ W5 i( _% }
           string cainame;
    3 M5 J7 G+ H; ^6 _       int price;8 p9 x" `! x6 ^) C2 o
           int hun;
    - Y7 {3 o/ E( k, {& P6 O3 k( g+ {. d       int la;9 m' w* }+ x9 b6 J
           };1 k" q2 n- ?( ~( m' j$ I
    int* alltotal=new int[30];
    " T4 |+ x, |( v) T3 m, o# ~  {! I! Aint pos=0;! T0 U3 x* v/ h3 \' ]
    cai* pcai;
    6 ?5 x/ r: B# i! [& c1 f5 mint N=3;  
    , |2 _3 y( K9 v: H/ P8 Wvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    ! d& q) b& B, p" \- L" Qint main(int argc, char *argv[])* C. J+ i( T4 H. N
    {" g, `, s) Y2 {. M5 k( ?
        int M=2,K=2;
    6 |9 O: a. N- y4 @5 ]; w. s& v    int a=1,b=1,c=1,d=1;
    3 K/ X# S9 m9 A: M( p    pcai = new cai[N];
    ! b9 o  w. u# u# o6 M3 R    pcai[0].cainame="water fish";1 C" O- Q1 x# i( m  ^) U! s
        pcai[0].hun=1;4 ^: z/ ^; M+ O7 c1 ?! I! ~: @4 P$ B
        pcai[0].la=1;2 q0 K% g2 ^! b& ]3 \
        pcai[0].price=30;, x' ~# s  r! H
        pcai[1].cainame="mouth fish";
    ( u7 [/ P2 J& n! l3 @    pcai[1].hun=1;9 s2 _7 g# |* |% F+ j; e! l
        pcai[1].la=1;6 o( }9 O8 k5 _/ a
        pcai[1].price=18; ' o* R9 |8 o0 R
        pcai[2].cainame="doufu";
    $ h2 |7 Y4 f# U; a. j    pcai[2].hun=0;
    : ]' G% V" S/ y    pcai[2].la=0;
    * Y: v( S* j* e    pcai[2].price=12; - H* I3 [7 t. J6 {9 |3 X
        for(int i=0;i<N;i++)1 y! h* b$ F$ [# ?8 g) _. B" k) V
        {
    . x5 Q% K3 F. f/ @/ i4 I        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))$ V3 K9 [# K4 O  A5 t4 A( {
            {
    ! `6 U4 {# x  `5 X* z        int ta=a,tb=b,tc=c,td=d;    % }, b) E, ?3 R$ P6 X; X
            int* select=new int[1];    ; N5 g" }# `- y1 N+ ]; g% G
            select[0]=i;: i  {! x1 x* J+ s3 d5 b
            if(pcai.hun==1)ta--;else tb--;' _% @- p3 `. m4 k, t
            if(pcai.la==1)tc--;else td--;$ O+ \* N2 h' ]* _& T
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);% L7 H# X1 f9 y% q1 m/ }
            delete[] select;
    ( c# G0 {2 q- }4 `% S% P3 m( |        }' J+ f# {* @- h7 o( d
        }( A# d) C6 s  }) y4 z
        for(int i=0;i<pos;i++)
    + E  S  S$ j; d3 j1 ]    cout<<alltotal<<endl;5 f; n3 D' P* w5 w5 d. [. i
        delete alltotal;4 \$ z* o8 O. L8 l: P# |- A
        delete []pcai;
    ) q1 L  a; A3 m4 a    system("PAUSE");2 X% ]) r2 e0 d2 V) ^+ o: C
        return EXIT_SUCCESS;
    1 o% G- e  ], l3 N, y$ q- z0 F; |}# W+ b- \1 v5 l; C
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ( {# H' Y4 v6 T# _+ ]1 I9 q{0 j; L+ I9 P8 C
        //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;# P  ?5 Q4 A# |) b+ z; i% m0 ~( `
        //getchar();
    , \- E( l+ ]1 P4 Y; @" n  ^$ E    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;. N' G) M, |& W
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}% U+ P* f6 j( s- e) u+ G4 h
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    + v% Q* Y( F4 @. e2 B& x0 c; T$ G    for(int i=select[n-1];i<N;i++)0 f/ B4 H" K; b
        {; A& s; h/ B. p+ H) c$ s
             for(int j=0;j<n;j++)if(select[j]==i)continue;# X3 V1 h0 }4 ?5 B! p& k
            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))
    - v( D  ?& j6 m& Z& W3 w( X        {
    5 E( o8 j) X- j* E- a& f# \        int ta=a,tb=b,tc=c,td=d;
    - ~) D, N7 y. q, c. s% x        int* myselect=new int[n+1];   
    ' w3 c* d. ~+ a' c" C4 y: m7 ?; Y        for(int k=0;k<n;k++)myselect[k]=select[k];
    0 n& l6 L% u5 ]9 M        myselect[n]=i;8 D  \2 V- @7 h
            if(pcai.hun==1)ta--;else tb--;' R( L& K  O0 K( Z; }
            if(pcai.la==1)tc--;else td--;/ \$ s3 C  q( e1 }; A; N
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
      _$ ?7 V8 N' S; C2 C1 v" k        delete[] myselect;
    % ?, n9 L6 M. y* w, S5 v        }9 ]1 `  m" d9 ]" P$ a3 V8 e9 D3 e
        }. d& C3 i3 L+ |5 L( N
    }
    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, 2026-6-14 02:47 , Processed in 0.400045 second(s), 67 queries .

    回顶部