QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12146|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    $ H! b8 J% a; V; v' U3 y: _
    & V6 e8 S$ ^1 k) ~2 `6 Q0 N' q“午餐饭团“是百度内部参与人数最多的民间组织。
      @4 i5 p! ^  `5 a3 U! h: g) u3 N0 T* J, u1 a( L% @4 w
    同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 " L5 R( H, n- j- a5 p

    ( {) ~/ v) P- Q+ @4 W, b5 |参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
    0 y, ~( {4 h8 E8 Q& M
    & [2 H( O7 A2 f但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 3 ]  V" `' |! ~

    7 [, U) ]6 S, n& t0 y( A$ c饭团点菜的需求如下:
    # {" \/ J. E  J) {7 o4 n9 f$ ?: S$ u' w2 E$ U2 ], @
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 " B3 a8 |8 q, i- c# \
    # ^; y" G/ k4 q% V# m+ }. h
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 & c. m* P8 [- J$ n4 O7 _
    : J! W( [5 e' M* a& k
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    ( l$ c$ k" Z7 L1 P& Y6 R0 Y1 n* l9 M7 f: W/ k/ @
    输入数据描述如下: % q; |% n3 s* l# o$ r

    % i/ N3 J+ Y$ O# x4 P% K9 x$ Y& n第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 / E3 i" v, ]9 G7 s8 N0 F3 r( ~

    + \* g' u- H, t1 H2 v- k紧接着 N 行,每行的格式如下:
    5 i7 _* T4 j7 Z# U& A& l( o
    # O1 F& Y/ o8 i7 [- e3 R菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    2 h) g2 m: [- k) ]! y+ E# }( B# s. ]' h
    例: . n- l0 a9 n$ B. }+ R; D

    9 y; z. z% L' N3 I: U水煮鱼 30 1 1
    + w. v0 `9 h/ s0 n" J, n& u% k; z' _2 _
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 ( C9 N& X) _; }, l
    ; [! F8 n2 T- y
    输出数据:
    ' Z' I. v  C* q5 _
    7 F* `/ f$ M4 Y, Q  D& H+ Y9 e对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    : P+ f8 U  F7 C- N( @
    4 \: a6 b* P! F. G; E说明:
    - y' g3 U  w) @, M$ F5 y
    % [- P+ F  a( Y) C& Z& r) }4 e1 J1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    ) X, Z0 g6 K1 P/ k4 R6 p. N
    & l" ~' h6 P) q: l4 X& {2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    0 w  `6 W9 d+ K. `; z% T' V1 P& H. U' }* |
    输入样例

    ; ]6 \1 |* i1 W6 R( b5 F! i
    3 2 2 ' d' O% Q7 B1 o( G

    9 v1 B! R  C+ Q4 Y$ S$ |* \水煮鱼 30 1 1 8 n4 s4 [/ S) \

    % v! C( y' @6 x2 c/ o口水鸡 18 1 1 : B' l) `2 E4 ~) U
    5 x/ _; b2 c9 ^" a# K; |
    清炖豆腐 12 0 0
    9 u% }' {2 g8 y; {1 x
    # R& n# G; X! c1 1 1 1 1 L  |: f" ~$ ^# R' T

      x0 w$ w: _- [
    5 `$ C) y: V- R6 _* }' W6 O- g
    输出样例


    $ Y/ O$ y* Z, n5 p$ Q1 c) s  A1 E口水鸡 $ j2 A+ @% [$ Y3 r: @+ G6 B. Z

    ' V2 E. a* [: @3 W: Z: y4 `清炖豆腐
    6 u7 ?7 w- s( F
    . |+ U/ Y* j$ y  q4 Y12.00 ' b" @1 w, b- ~+ ^& u4 L4 u

    % u2 e0 [8 {( l/ k) ]
    - f9 X7 z5 G9 Y  M3 p' I/ `! O
    $ m% K- L. g0 Y$ W/ r
    时间要求: 1S 之内
    ) b' }7 @0 K- R! q# w' E  E1 w
    % M; |* L3 ]# P% uexample:
    ! g7 m6 G8 M# |9 U. n#include <cstdlib>
    ! j7 Q, M3 {0 e: l' K6 `$ f3 ~) ~4 Q' h#include <iostream>
    ' z  `' X1 \# k$ k3 T
    % G1 p2 d6 j! L' b$ `4 Jusing namespace std;
    0 P' a' V$ s+ M) z4 ?! H+ Z% S( E, e' V. m# k* L' Q" N* V# B

    9 ~$ i2 s* d( H( F& a8 M0 }( Hstruct cai
    : R' Y$ V/ t5 A& q+ b' F& p{
    ) i/ F8 ]5 @; N3 U       string cainame;
    , ~2 s2 _; b7 n2 B% r4 t" x       int price;* |/ Y  e+ Z4 n
           int hun;5 e) N  y# ?. @# D4 ]
           int la;5 m; J+ g3 {/ F$ f
           };
    / J9 `% b; q! `4 M4 d0 h- A2 fint* alltotal=new int[30];
    # y( ]3 t0 S! K* Cint pos=0;( W) R7 Q) ~* i
    cai* pcai;
    2 H- }9 ^5 _/ @  Q. ]" P8 Lint N=3;  
    ! ^" u% Z- K& \# K& f, c' f3 wvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
      B# q, Z4 |4 Q1 Pint main(int argc, char *argv[])
    + U- L# [; Y7 b* T{
    ! {6 _0 ~* C- N4 F9 U. x    int M=2,K=2;
    $ E9 X8 Q3 A. P) l* s9 v4 o: S5 ?9 E    int a=1,b=1,c=1,d=1;
    3 U) C. @. P' |# F3 N    pcai = new cai[N];
    $ v2 N9 {7 a8 \; U    pcai[0].cainame="water fish";5 b8 r1 u( q. k2 Y5 _/ Y# S$ b
        pcai[0].hun=1;; W' F2 J- q; Z/ h% Y/ b
        pcai[0].la=1;% r* B1 W; U5 V! U5 D- V3 d
        pcai[0].price=30;+ Q/ K7 ~2 g/ i( E3 }
        pcai[1].cainame="mouth fish";/ |/ ^) h0 g9 U# {
        pcai[1].hun=1;& |4 v6 }4 T6 O- J, U( O9 }
        pcai[1].la=1;$ c; \) {% ], n$ C1 h- l+ @8 v. _
        pcai[1].price=18;
    " f5 T% K4 Q3 n    pcai[2].cainame="doufu";' t# M) i7 }' v( t* z
        pcai[2].hun=0;2 D/ J$ I; a  p$ g8 r. ?8 g
        pcai[2].la=0;
    9 l; k; K- f: e, n& A) f8 g    pcai[2].price=12;
    7 L( k, L- B  U" z# W    for(int i=0;i<N;i++)& C+ ~% F% a# Z/ Q
        {
    3 `7 C! c) F, B) E        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))# K: e2 O, q' k2 B3 c
            {
    1 x: n, v4 H4 {* I        int ta=a,tb=b,tc=c,td=d;   
    4 E% s6 x; s  u& p9 x2 y9 j        int* select=new int[1];    " F, i7 P' \2 B/ t. q0 W* E
            select[0]=i;
    5 k* q% ~' a% O8 H$ F        if(pcai.hun==1)ta--;else tb--;$ k! S: \9 w  \/ U$ T7 R' ]
            if(pcai.la==1)tc--;else td--;
    5 Y& [7 ?1 T, L2 Z* N8 a: Z        fun(select,1,M-1,ta,tb,tc,td,pcai.price);; z- ]& o8 H! s! T4 Z# D( E
            delete[] select;; F5 \7 |+ F: E# J
            }7 `4 l& p( M8 B1 t" K6 O
        }3 r- X8 G6 N0 a/ u) G$ A& B  @
        for(int i=0;i<pos;i++)& l2 B& v/ c2 b$ b/ n: ~3 H2 v
        cout<<alltotal<<endl;8 `( @3 N3 ?3 Y5 L: S
        delete alltotal;8 S& f. c2 g  e
        delete []pcai;
    7 m- p6 F+ R1 S" e1 n! e1 Q    system("PAUSE");
    4 I- r/ p# m$ B8 Q) n5 B2 x: _    return EXIT_SUCCESS;
    $ g! P4 k8 G9 B4 e/ B}
    * C* ^; K& l+ {; g0 kvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    6 b1 D" W/ r9 M$ S{
    0 q, V  [1 x4 l5 X) _# M4 X$ U8 v    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    " D; `: o1 H- q9 n; w  @4 k. n    //getchar();# E7 o& P5 D' u  d4 x/ r( w6 U
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;$ D7 @" ~- k8 E1 l# |1 z" q
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    . I  z  M( {2 @- ?( D    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    ( t" P# g3 G( f8 G    for(int i=select[n-1];i<N;i++); |* b9 S! y; V
        {" X) h/ A/ o, \$ o" A
             for(int j=0;j<n;j++)if(select[j]==i)continue;
    ) C' i2 i2 }' P4 U) 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))$ l6 S4 M$ g1 A4 J% `
            {, G/ O1 F) L2 O6 S$ S+ G8 J
            int ta=a,tb=b,tc=c,td=d;
    ; N' K" n4 t8 {( D8 ?. C+ e        int* myselect=new int[n+1];   
    ) u6 u; c; |, }        for(int k=0;k<n;k++)myselect[k]=select[k];
    ' K. s3 i. ^3 n) S, ~8 H' I        myselect[n]=i;/ E: p, k7 |# Z* k
            if(pcai.hun==1)ta--;else tb--;; c  }) P' J" U" o0 G
            if(pcai.la==1)tc--;else td--;
    / I, N; _' J( _" o        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    * Y! H- n  S6 l5 _0 @1 Q        delete[] myselect;5 c$ Y) V+ f# b1 i$ s  B
            }
    4 q+ a7 J, w( m9 l    }
    2 j9 i( v+ V& b0 l7 v4 H}
    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, 2025-11-8 23:46 , Processed in 0.477806 second(s), 55 queries .

    回顶部