QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12335|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    5 h5 _: I/ j) }. R/ Y3 g3 Y) p  a+ B  N" I# U, }
    “午餐饭团“是百度内部参与人数最多的民间组织。
    ' o$ `( u; Y% V7 V8 ^# u- a
    + k4 n7 D3 _( i* U同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    % `, W3 C. p& z! D! I. o- u1 Z' T
    3 i2 e# M/ @# g! w8 i1 ?& h! Y' U参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 % h9 y" u2 L+ r! C, q+ Z" d

    3 ~1 T4 g- `5 ~" T# [但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    ( C6 f' u6 {0 F- O% c+ N5 ~% K; V1 |6 }3 y
    饭团点菜的需求如下: 5 m8 S0 U5 l; G/ m; [( n8 @
    1 D. R2 N: q/ O/ u* H; `+ ~
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    9 n- \# a" R' ^4 l6 c. c
    7 ?" K3 b6 p# z2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    1 ]4 Q. D0 B2 |( X( Z2 I1 A1 @* w/ J) u( Z
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    , L. U& r& g3 \6 m% E% Z# Q- W8 i' |
    ' N0 }. b' q. }" ?输入数据描述如下:
    # z2 g8 ^) Y5 y$ V+ Y) I
    ! S" ~. D- \2 F" l4 r第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 1 R1 f# |5 ?) P, @, `2 P6 G
    ( s- ]7 A1 C# R' H% G: e
    紧接着 N 行,每行的格式如下: 5 ?9 F$ a2 E% F+ i0 ^
    $ D# M& ?: R9 h2 o: u! q& r
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 4 \. i5 h! R% C0 ^

    6 V9 J+ u( z( P" p6 S& m6 y& _例: 9 j# b! Y& U' m1 L* t- W6 t

    7 ^) j7 T+ V: l# y/ u水煮鱼 30 1 1 0 ~' R$ s# b3 c" Z, t
    7 i  ~" ?) G* R
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    6 J& b4 T7 {7 @% d" H: l. O! y
    . l8 N2 I0 u2 s' G# v* s" h输出数据:
    1 Y% b6 h  x5 U/ d" p3 @) N4 P
      u: T5 a4 P% W9 L+ M对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 6 U5 W7 u6 e5 ?6 I" |, F
    ; U3 X( H& R; f6 k
    说明:
      N! o' l# ]7 |3 e
    ) q; x) g! M- k) W" U; C1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 , P! f& }5 T3 r, ~

    - f! z' K/ W: u# N2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    : ]& b; @- S4 K' e# I0 y- C/ U- r/ O4 h3 N$ R" [' @( h$ b
    输入样例


    7 X+ i# m7 ]# H% h3 2 2 : x1 K( B8 v8 t9 S( c

      l8 i5 L; I' m) ]: p" v水煮鱼 30 1 1
    % P4 y; h' o3 g) G$ A7 @- Q' n) m7 v6 [% `( i. F4 z# O
    口水鸡 18 1 1
      m. E2 M& X; \( b% K
    ' J7 ?5 E2 [  B清炖豆腐 12 0 0
    2 J) @) s4 T, c8 J0 s& F
    & N3 j% D. J/ x3 v) X1 1 1 1
    , B5 W2 N: L2 S  ^1 L( U3 l% }


    # P& j1 T/ g& G; J+ K
    2 u9 \/ v/ f8 Y输出样例

    0 W( E) H. g: F, \; m, T3 P
    口水鸡 ( j3 B( Z. [+ a2 H) d; ?
    * l' ]! W. [  Q' z
    清炖豆腐
    3 Z: K0 t5 K8 z5 I" C% {8 [! t! r5 R8 O
    12.00
    4 v, S' y& d1 Z. D1 H8 Q& M6 T0 C

    & i0 _% c! {& N- t2 b

    / M! `$ {. C* i3 ?' ?1 v- W
    5 ?- i2 a% ~' t* z4 W, ]时间要求: 1S 之内 - U' t" n2 [' \0 |- b7 o' a9 N% F
    ! M* }( j9 q1 z; O! U
    example:6 s. ~$ X. {/ `  o) A/ Q3 r  a
    #include <cstdlib>% }: k: K2 Q" w  e1 [+ C! r
    #include <iostream>
    ( F! E% B4 `* D9 o% u
    ! f, `" ~# I% ousing namespace std;2 _' F: W; }4 R
    , w5 R9 D* Q2 E  j4 e8 v
      V' c5 Q% X& V4 \
    struct cai  r; R1 Z) o0 z  [6 x- E( U  y
    {
    & N* P6 U8 a0 {! @3 h6 k       string cainame;
    ) k* X% W- J4 j' y# m5 D- y       int price;
    6 a( p/ b! R5 S( Q+ U9 R       int hun;
    6 P; U, q4 U8 v# [       int la;+ Q7 [5 w* O! O" ?9 V5 q! K8 v
           };
    1 y# n7 u* D4 t& Aint* alltotal=new int[30];
    . h3 y* t; P* pint pos=0;, G; A+ O4 U  v2 v4 y: t* F
    cai* pcai;
    0 [0 q1 N! p$ Q9 z. D* h, tint N=3;  
    , b: T- [% d7 d( ovoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    - j: c6 N( r* I7 Y* Y" Y6 wint main(int argc, char *argv[])' b, n3 G" L* n+ f9 p6 v' P
    {
    7 m5 v+ Q) R3 ~$ C) I8 \: y6 M    int M=2,K=2;
    1 j3 o' _/ U, ~/ f) v    int a=1,b=1,c=1,d=1;. U1 ]4 S7 ~, N- O, I5 _* C
        pcai = new cai[N];
    5 X7 [" S6 H  \, f0 g) q    pcai[0].cainame="water fish";
    : S& a$ g3 ~- O    pcai[0].hun=1;
    $ w* H0 E6 p3 F5 e  _: ?    pcai[0].la=1;& I  Z- a) ]) \7 B
        pcai[0].price=30;
    7 ~  J# ]1 H! B2 L$ K7 L' @    pcai[1].cainame="mouth fish";& F( Z7 _9 Q) r
        pcai[1].hun=1;
    3 o' Q0 O/ L1 l9 {    pcai[1].la=1;: F8 O: L7 R. x, l% v# f; O
        pcai[1].price=18; 1 p1 m! H" B+ n
        pcai[2].cainame="doufu";$ t) x  Z; N/ Z% M
        pcai[2].hun=0;
    ' x" l9 G* n; @% s    pcai[2].la=0;3 X7 [$ m% ~# j! |. n" ?1 ]
        pcai[2].price=12;
    1 N  \  F, i$ t/ m* Q6 I    for(int i=0;i<N;i++)
    / C- [2 A; n7 m, ]( S3 z    {2 Q& w5 e  s3 r3 O6 i% t
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))2 H- a* o. q, q1 q  y4 E( q% q+ G
            {
    : z* U( D8 }+ P9 g* b2 T0 ?3 ?. C        int ta=a,tb=b,tc=c,td=d;    3 L, V' k6 L: a" u6 k3 b9 i
            int* select=new int[1];   
    : t% Y2 a7 q9 N* R% H7 ^2 g: f        select[0]=i;5 d. D& U- V4 P3 @$ n) X
            if(pcai.hun==1)ta--;else tb--;
    3 F5 l( z9 I! K" P+ q* b! O. `        if(pcai.la==1)tc--;else td--;$ A1 O# {3 @9 v, ?: T4 \& x* d
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);8 g- i% S0 e( e+ q9 S! y4 [
            delete[] select;3 m- l9 E: t3 p
            }
    $ t* C: ?- G' x4 W1 |6 S* L; M    }
    6 g. Y8 b* C) V# y  H    for(int i=0;i<pos;i++); U# r- |3 M0 z( c9 l3 k
        cout<<alltotal<<endl;& z5 q2 M# C1 E3 I
        delete alltotal;
    : [* ~: q) r* u- }2 o9 I* L    delete []pcai;
    5 k' [- `0 v! N6 `7 F, Q: G' v& e    system("PAUSE");
    + j9 h' S9 b) B4 Y  k    return EXIT_SUCCESS;0 D) S7 X9 g7 m5 f/ S
    }6 e0 M) d' _+ ?0 V! Z4 g+ Y
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    # x$ N2 ?1 h$ D. K{
    % g3 E5 V2 k5 J! C    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    2 m) a9 ^! @' E" t9 N6 A    //getchar();+ O' d, E3 U" w$ m
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;! ?- M) H* r6 `$ H8 `  F& I
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}& ^' l1 Y0 I& \$ T
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    ( a" [4 m+ Z+ P2 S# G9 N    for(int i=select[n-1];i<N;i++)
    / ^* |4 k# q2 o$ H8 J3 C    {
    ! L1 O; J9 Z2 i0 o% |; k$ B7 h         for(int j=0;j<n;j++)if(select[j]==i)continue;9 G, [4 t" y5 z- l" {: G( @
            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+ X4 b. {$ o! u8 f
            {8 ?5 K$ W6 v( w- C5 H% ?' D
            int ta=a,tb=b,tc=c,td=d;: T( ~: p6 z, J, h3 q" @
            int* myselect=new int[n+1];    6 A" l/ N- N# r0 b1 v% K
            for(int k=0;k<n;k++)myselect[k]=select[k];
      H% P( ^. R8 C4 ?) A4 |% P        myselect[n]=i;! o, U- s3 x0 H* p
            if(pcai.hun==1)ta--;else tb--;
    ) Q6 t3 n) ^! Y        if(pcai.la==1)tc--;else td--;
    $ a2 R# C# ]& x6 l        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);: B3 h  n5 k9 M2 Z# I1 b9 S
            delete[] myselect;2 y6 w7 {1 ~/ C4 v" a' P8 S  d
            }
    - A- L; Z# c; o0 x7 c' I0 G: p8 h    }
    % `) N$ K4 F, A4 A* {. M! J$ 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-4-23 20:47 , Processed in 0.653355 second(s), 67 queries .

    回顶部