QQ登录

只需要一步,快速开始

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

2006 年百度之星程序设计大赛初赛题目 1

[复制链接]
字体大小: 正常 放大

1341

主题

738

听众

2万

积分

数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    跳转到指定楼层
    #
    发表于 2010-5-6 18:56 |只看该作者 |正序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    饭团的烦恼
    - S  `) u0 [" U: j% u. y
    9 V0 E, u3 j) {- e“午餐饭团“是百度内部参与人数最多的民间组织。
    $ N1 U3 N6 Q4 q4 R1 Q! Q+ R
    0 a8 @8 E! D' i1 _/ A! I" ]# A/ s同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
      ~4 Y8 u4 m; p) |( W5 N8 S# D3 n7 B* P- I6 N
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 : d- ^7 C, f# F& t' r

    7 ]# A$ ?% ?- ~% {! C但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    9 P2 U! G! Y! N' k* u# j. d
    : m6 c& P% h7 M饭团点菜的需求如下:
    # B( U8 F* H; R4 \6 v! y4 g# v$ s( Y; Z' b
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    , c) `; k& l- r0 w
    7 F/ N( Q0 M/ J; r2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    * v& X2 m2 p/ q* k0 X5 m
    ; A7 A) y4 p. g  O7 X; l9 R3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    % L5 R+ w% H& `. }4 S1 o* I5 b$ v8 Y, F& N5 p* Y8 j
    输入数据描述如下:
    ! _; i& n& c- u; j! E0 u$ o. a' Y' J5 s, H3 z' y
    第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    9 u2 u: l3 X0 j# R8 A2 T$ |( M* z  W7 b: L$ o
    紧接着 N 行,每行的格式如下:
      `2 e  I* b1 H8 ~+ ^( y7 N. m! b9 [) f; w: @' M8 i
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    3 g3 a, o3 K4 u8 K# y- z2 P% S3 D0 U$ x( A- ~
    例:
    ; G) i1 f& e( e& q- W0 y
    ; L+ K8 j6 }# l% n: u! }9 ~8 A  [1 x水煮鱼 30 1 1 8 v1 t0 U4 |! t: i$ m1 v
    5 [+ Y2 E7 H0 K- j" U& V0 V/ Y
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。   y0 ]' [; ^5 D( G

    & i) L; @* T& Z$ B/ ~# ]输出数据:
    ' L) Y4 p. t  V* T5 @# n/ H6 w- w7 x% W: W  s
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    1 x+ \5 Y& m( E5 v" S
    ( W/ b! {& u7 \+ `8 ], s* v说明: 2 c% V: \& C7 g& N
    ) R1 P, V. b3 P, V% K
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    / p/ \3 ]' W( W3 X  ]. L1 a, W# q) J4 X8 x" V/ P& }
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    1 @, ^/ E4 ~* {+ r
    2 c, L8 y4 m; R, J4 g# T) r输入样例


    - G/ ]. {2 b# {, P0 j( q: R3 2 2
      `2 v  \* W" c4 \% C
    0 ]) r! G% p$ y1 N9 f水煮鱼 30 1 1 ' a) D- T& {! s
    7 N2 w4 w+ U/ R" |
    口水鸡 18 1 1
    $ x2 l+ a6 r8 G8 T7 `) n# F1 Z  \% `; f& a) A
    清炖豆腐 12 0 0
    $ d" e$ j! c, f* U& Y
    , Q% m1 }( H3 _3 N. c1 ~1 1 1 1 ; y( o* e2 K# s

    8 E4 c* Y# f- Z/ G9 r- m

    6 Y4 z3 v2 |0 B% q输出样例

    / O1 g! B4 V; B! q: [' c
    口水鸡 ' T$ n7 F; k% x/ I: L1 F& g
    4 j$ B  Z; R& |3 k8 c! t, \8 t+ b
    清炖豆腐
    ; c9 u5 j( U" i" m/ T4 {( ?1 d4 M$ H6 j: f$ f
    12.00 / @& }: U6 B! U! G% C  Q+ x( N

    & u# T' O9 _3 W' A( g: j
    $ G5 V$ A; C* X! |  M# A, ~

    ) ^0 h+ D8 w, L9 I时间要求: 1S 之内
    6 O. i/ R6 n8 J2 R- F7 {! h: P
    ' R( _" |/ P$ X" c2 K* Gexample:* h+ J2 c$ `5 u$ ?+ L+ r( _/ ~* M/ I
    #include <cstdlib>
    % ^) K* I* ]' _+ ~( {#include <iostream>( Z* o0 j0 i0 ~" @1 m

    ; T- \3 U2 h( }/ e0 xusing namespace std;' G" H' p, n. r9 N# t2 a# I+ y

    ( G' j+ f4 u; ^! `# K# Q5 U. d# k3 |. J2 I' O! f3 L; m1 o
    struct cai
    - `1 x7 U+ u& I4 d5 T{
    + E  ~, ^4 }' E8 }+ k       string cainame;
    7 H( ~. _$ K& n$ V$ ?       int price;" u% c- b2 n3 V( W# O9 W( [- e  H
           int hun;
    ' j$ J: h+ Z# x: c' }0 S+ o# J& o       int la;
    0 J: B6 m2 }6 E8 e: _. b       };
      Z( v/ K% v& kint* alltotal=new int[30];* B9 f  e8 D  H7 \4 r
    int pos=0;7 O: F/ e1 r+ M+ p2 H- L
    cai* pcai;
    : ~' \+ K$ r& E. V2 Mint N=3;  ) @) l+ U) o8 P" z! v
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    - K# |( n! X5 D/ E% Tint main(int argc, char *argv[])" g' o  e0 P, v+ t& c3 g
    {( _3 {$ g" {# u6 W: d% A
        int M=2,K=2;5 i9 w; L( e0 c: w
        int a=1,b=1,c=1,d=1;9 X8 p6 o  y8 O. d2 Q3 s# m% k
        pcai = new cai[N];
    2 O% Y* @4 e; M' p$ c0 n+ b9 K    pcai[0].cainame="water fish";: c9 ^- B7 E& S8 u0 ]% Q7 ?$ Y# J
        pcai[0].hun=1;
    9 w+ r3 `, o  A! q9 V8 j" i) U2 j4 O    pcai[0].la=1;6 E+ G) b" L! P2 p- R
        pcai[0].price=30;  Y/ _2 ?9 b2 I+ X4 X9 e% X
        pcai[1].cainame="mouth fish";
    & y% m1 g, u1 K7 q& E    pcai[1].hun=1;/ D) U' L1 d: a% B/ T5 y* P0 Q
        pcai[1].la=1;9 H) p+ H% K$ x* l+ a" y
        pcai[1].price=18;
    , @: h' g; P* c1 G3 \9 z/ ]    pcai[2].cainame="doufu";
    " T* E, ]( ]/ E; ^2 H/ S. ~    pcai[2].hun=0;3 V- j7 O* o% Q' N, @% S1 F& c, j
        pcai[2].la=0;) s" U4 j6 V6 D9 Z4 K
        pcai[2].price=12; ; G2 p# `3 E( R
        for(int i=0;i<N;i++)0 n' B! W  w& g
        {
    ! m9 ]1 C' z" y6 H. u        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))# I# {* v4 k" a. ^, L, r
            {
    # h$ I+ d  I' ^8 ]! h4 U% ?4 K1 ^        int ta=a,tb=b,tc=c,td=d;      M2 ~7 {/ A5 h  U& N
            int* select=new int[1];    % V2 n7 ?: r9 P2 l4 g
            select[0]=i;  I+ \- B; X+ c: E" o
            if(pcai.hun==1)ta--;else tb--;
    5 x. r: Q" M5 M3 i8 S; [8 `        if(pcai.la==1)tc--;else td--;( w  K' c+ w4 @  e' y+ S  I
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
    # K: ~" E7 i! t* ]3 ^5 Q" s        delete[] select;
    . h8 A1 D4 J" _5 ?. i        }
    3 a# n3 U) @, s/ s    }
    + n, h/ t) O: U& ^( _    for(int i=0;i<pos;i++)
    ; M1 x6 N; l6 o# n( ]" K+ o    cout<<alltotal<<endl;
    & e0 D, ~. y2 [    delete alltotal;
    4 \$ y3 ?2 h9 c1 |. H5 E    delete []pcai;' T7 Y0 Q) A( r+ r2 D) p
        system("PAUSE");" O" i6 A/ u. W8 k; @
        return EXIT_SUCCESS;  _! T% b; K; K6 F9 l, I* V. U
    }
    ! e- d0 K; B5 F/ C* z9 W! Ovoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)$ M" p+ a; Z0 `
    {: `8 i  Z6 A( I- d
        //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    # b' D# F+ o0 d/ w- h    //getchar();
    $ G- B# y7 y6 B- V* W$ [6 Y8 E, Z; v    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;! m, y' s" P4 f/ n
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}7 _$ E. ~6 u* i+ Y  L
        if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}% @8 J1 e& x: C7 N; A! }
        for(int i=select[n-1];i<N;i++)4 a9 M6 a8 Y/ Q% K' M/ n+ D. Q
        {
    ( Y5 Y2 j, g3 ?+ V* z6 V% _# _         for(int j=0;j<n;j++)if(select[j]==i)continue;
    8 c. i3 i, A1 l3 K* T        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))! t9 j* w, Y1 y4 H' b
            {
    $ g# }1 R/ g4 [        int ta=a,tb=b,tc=c,td=d;# o, m0 h# d; a- D% m0 Q* \: x: h
            int* myselect=new int[n+1];   
    ) _" ], \. I" W- V- N) Z' i3 A1 Y  A        for(int k=0;k<n;k++)myselect[k]=select[k];8 l! a$ e% W1 \, y' N
            myselect[n]=i;+ Z5 u4 D- ]7 C; l& X
            if(pcai.hun==1)ta--;else tb--;
    : V- @9 o" m7 K6 q8 C! j/ Q( Z        if(pcai.la==1)tc--;else td--;
    3 I+ N" k$ t# `8 Y        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    7 V  T; I8 ~8 t        delete[] myselect;/ t* Z/ n+ L1 ~5 X+ @  J- G
            }. o1 J1 X" a3 r' I
        }
    $ G6 `0 g4 W% {* h$ ?5 b}
    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-4-22 21:28 , Processed in 0.596969 second(s), 57 queries .

    回顶部