QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12532|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    2 i& l6 a/ e  x5 {4 Z0 y. {
    # z" t% K0 _3 _8 ^: z' {“午餐饭团“是百度内部参与人数最多的民间组织。
    4 h6 R( B; C! x2 L; ~7 N: d( n  v  N( l- a4 C6 \& Q
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 ; v- B# K' J" h2 v+ y* l5 M
    : B- e$ l( y, o! z, }- F4 z! g
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    " M; f( F$ m' i$ `: U  J3 J4 ?0 i$ S7 j; ^
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 7 C: O7 f3 F+ o. X. d8 D) y
    : a1 T( G, Q5 u1 }
    饭团点菜的需求如下: / z8 ]! L* o: |) A

    9 t7 V& o( t( p. h! j( P3 m: S1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    , |7 D9 ?; T9 D3 I+ G" \! }4 y2 I5 `2 }( g% I, p
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
      e# }' q4 G* P0 _% X0 s2 U  B! s. @. Q/ a
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    ) k  m9 r1 d* I) X9 X+ N1 V, P7 @7 j6 z+ G! G- u
    输入数据描述如下:
    6 |8 N  T2 {& P8 L% |9 _9 |/ f: h! V' a1 X
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    9 H) a; p6 F* Z1 t2 e0 r' Z$ I8 M8 x
    . S7 X8 w" ?) u紧接着 N 行,每行的格式如下: & g& r0 V0 R, J7 w

    4 A) u: Q( y6 _9 A. U: G' N菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) 3 J, d: f7 p' o9 W' _% X

    , c: `8 S. S# c# W$ a例: ) ]  J0 k* r6 z* Y+ E8 u
      s! m- B$ Q( Q% B
    水煮鱼 30 1 1   J% E5 V5 M5 p6 _2 r
    8 ~5 j- P: d3 t8 n" f
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    6 W2 ?( S3 h! I- }$ k
    2 X  d+ i, Z$ H- J) r0 U输出数据: % I$ Y. _% T/ S7 T
    0 i$ B* {. ?& L- }1 [
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    " G7 `% R: ?- R. @' m$ `. |3 Z7 Q
    * e9 r( P* j4 p( }8 u/ w说明: 2 A* r; }& y3 D* N3 c' l) V& S& x; b9 [

      z$ N. H/ U$ Q  P  U! @1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    . K) R1 ?% u! ?( e3 R( T, u) E& u' q) A  ~3 h/ m4 F0 m. V
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    , ^4 z: M1 o7 k/ I  b# u1 E" D
    : S  r% z: {3 o. j4 D/ }" u输入样例


    : i0 \; \0 O- d7 q+ Y2 w9 e$ Y3 2 2
    " Q% A1 C+ a: ?. i" a. ~+ P% T* I! ^7 }$ L  s; ]* ]* K
    水煮鱼 30 1 1
    3 D- x( e* e  O# Z6 H* R; d" R( |" Q' N- O1 T3 w5 u% o
    口水鸡 18 1 1
    $ D3 s/ g* A# T! Z8 q6 @6 ^7 L9 h1 R7 z" \% {
    清炖豆腐 12 0 0
    4 c7 g4 U. }( b
    + t# u6 f& \1 m' I0 i9 V1 1 1 1 & G5 s% C! U  h$ a# s' u

    $ l5 M3 a1 [/ X: s1 G+ R3 E: S: O6 v
    ; D# `8 t& G8 y  Y' A
    输出样例


    ( B" {  K% O8 t" ]+ G  |$ G2 a口水鸡 5 }7 O3 q8 L7 P& {* w: L
    0 a- g- k$ p9 `, ^
    清炖豆腐 9 X: g; K3 F9 k0 R& A

    ' u: n# n5 Y. y4 w- A/ S7 q12.00 " r# X6 w8 x, k7 Y* b- G


    3 {: x2 X9 ~& \- J5 t1 L8 U' B

    ( \# i. t7 H5 Q& v$ B时间要求: 1S 之内 ( C6 n' O, t% K, K6 B

    8 ^: ^* g# e2 d2 i2 H" I9 eexample:! ?0 s& c: y8 r! |
    #include <cstdlib>
    1 W  V# a6 W6 K# N4 n#include <iostream>: _1 X3 u5 u+ X8 m

    9 H: o. ]! Z2 I2 A) Y8 G: U  }using namespace std;
    , T& A8 `/ `: _9 q1 r# R! c
    ' g8 h! h- Y8 Y0 O  L/ ^' V
    8 V- I( L) E7 C# @7 astruct cai
    % N6 N- h3 L$ _' f{
    . o5 f+ `' U6 T. u* s8 Q0 W       string cainame;
    / O/ @3 j; E( n& N; W9 w$ S7 O* C       int price;
      b* C+ F9 v$ k! l. ~/ j       int hun;
    3 f! B4 F8 \" o0 ?# {  |       int la;# @: F0 d! k4 V% k1 a
           };  B1 T) X8 W+ I8 u1 o' @* ^
    int* alltotal=new int[30];
    # e% ?# U4 b6 i9 t5 ]int pos=0;
    : J9 T5 W, @0 y: ncai* pcai;
    1 B8 g5 y" R; C3 A3 Oint N=3;  
    . }: b* Y5 b" e1 k' w3 D4 @void fun(int * select,int n,int M,int a,int b,int c,int d,int total);# q, q5 c# a1 G# C" H; B
    int main(int argc, char *argv[])9 L  e) c, ^- U% q$ Q
    {3 T1 q" a  D8 N8 B1 y( U
        int M=2,K=2;
    5 M  K/ H" q) W    int a=1,b=1,c=1,d=1;
    # Z$ N' `8 M9 J& A# r    pcai = new cai[N];
    4 Y2 M# v( G4 {3 f3 b) S' ]4 u    pcai[0].cainame="water fish";  H/ S9 L' p. ?/ a: }' ~' R' F
        pcai[0].hun=1;
    / l/ A- J# c) o7 u    pcai[0].la=1;% s$ x; Q& E: Z) @
        pcai[0].price=30;8 j8 F) \: j7 g1 c
        pcai[1].cainame="mouth fish";' ?- ?& W% I- w  [3 r+ I; f& \0 S' R
        pcai[1].hun=1;+ v' |+ J+ X7 ?/ r+ n
        pcai[1].la=1;% A8 h) x  T: P6 x& }$ P9 v
        pcai[1].price=18; 2 }. @& L* g  W" R
        pcai[2].cainame="doufu";
    7 \2 B0 b' N1 K1 J& d) F    pcai[2].hun=0;
    ; \4 D0 }( {7 K7 ]$ `    pcai[2].la=0;0 Y6 N1 {( b9 y$ R+ m
        pcai[2].price=12; 4 w- s0 j# Z% |0 t0 e3 y* [/ L
        for(int i=0;i<N;i++)
    : c5 y) ]0 l" y! v" {7 E    {
    4 k' M6 n! V4 S, Y        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    - a5 h) [# o/ ?& h! L, v: P, D        {+ W6 K- {( B: m9 P" W
            int ta=a,tb=b,tc=c,td=d;   
    : o( [3 Z, _) Z7 w        int* select=new int[1];    6 C" W* p0 T5 z1 f% D$ G2 o
            select[0]=i;0 Y' f7 `5 c* s! y# _: Z/ L, b2 n
            if(pcai.hun==1)ta--;else tb--;: L! [( w5 @; C8 L( S8 k, J
            if(pcai.la==1)tc--;else td--;( K" E* K# X! |7 {
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);. x& ]2 K4 D/ V2 r3 y$ Y
            delete[] select;
      C8 ~- F8 n7 H1 O# o; ?4 k! N        }
    7 y# q# ]% a  Z. D" n# \    }
    3 S  A) H* E) i; Q9 y    for(int i=0;i<pos;i++): B5 _7 i; l+ s8 G. \
        cout<<alltotal<<endl;
    # d0 n1 f6 @. t3 C" s2 R: {    delete alltotal;, T2 i5 d9 [0 q3 h4 Q5 v( }1 R
        delete []pcai;+ B. j% R9 X' W* r
        system("PAUSE");5 n; a2 D- I' ?" ]8 k
        return EXIT_SUCCESS;) P. ]( x' ~* R* C2 [# r* q
    }5 n  F+ g1 G% P7 s
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    2 h$ ]' ~- z2 ?; r, E. x/ o{, r( K3 J4 p- [) C" G
        //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    0 P" Z1 ^0 z% G0 H' _$ u8 v5 q2 _    //getchar();, n8 T; `, x% M
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    ' t4 K- l/ [. k5 R7 P' L; m    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}9 V9 m/ q% z  l( F1 ~% N
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    7 Y2 _/ f, E0 Y2 @: e    for(int i=select[n-1];i<N;i++)
    9 O- z' u4 M" B  \+ h- x    {
    ; T" T/ F2 _9 d+ ~1 [# [/ V, r         for(int j=0;j<n;j++)if(select[j]==i)continue;+ f8 i# ~1 X/ f' Z% w6 x3 D  h
            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))
    7 |7 P. b! Y/ f9 f        {
    3 x% h% Z: @/ o, x3 Z, k( E# ~+ E" P        int ta=a,tb=b,tc=c,td=d;" ?  A( \+ E* A  q6 M
            int* myselect=new int[n+1];   
    & x( x* q6 C3 n4 V( D, z9 u        for(int k=0;k<n;k++)myselect[k]=select[k];( t6 |8 P0 d' p) f
            myselect[n]=i;; g, K. x4 F4 _/ D
            if(pcai.hun==1)ta--;else tb--;/ x, E: L# e. |0 P& I. V' m9 J5 A- O
            if(pcai.la==1)tc--;else td--;
      ?/ Z/ u, K/ N        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);! j7 L: K% ~/ u2 ^! c. X, T
            delete[] myselect;
    8 G0 F; [& `: I, @* U        }
    . U, v9 ?, f! x7 X' A: Q    }
    1 u2 Z; X4 h6 e5 H0 w6 R}
    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-8-27 19:57 , Processed in 0.470719 second(s), 55 queries .

    回顶部