QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12411|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    ! h( y- z) A; C0 `+ C+ j7 u% q
    5 k' @! F, o" ]* [“午餐饭团“是百度内部参与人数最多的民间组织。
      ?+ ]4 q4 o* f' s# p
    : i8 l: @. V% E- l$ B3 p同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    ) o) A' q0 ?2 ^, u0 w! B6 F
    5 z" F; C  v2 d1 {0 Z' n参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 * e. Y# d1 O! O" Z" y# T! L

    , Q& X9 U& L- T6 d* _' D; A但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
    6 M9 m) o% f5 }2 g/ ^( }; g
    9 ~# O* F, \# M* f3 h& q饭团点菜的需求如下: ) W. {2 ^0 G+ s" ]7 i! z  [

    : T) h' R/ E& B) x1 ]1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 # Y8 o' U3 Q) Z& J" \5 X* K6 b
    " L- {( d$ R" I' e
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    + ]2 l# R8 \& F5 I  H1 Y/ C$ h" l! ?5 Y# R7 h( H; _( J2 b$ g  X8 b
    3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 / @5 H! ]# k! q$ ~9 `" K
    2 _8 b& Z$ c8 M# x
    输入数据描述如下:
    - k$ t: c0 k9 K- `  u
    , c- J, g1 N% K* i& A1 H1 d: w第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    3 A5 I1 [" j' w$ X, p$ P% {  s( R, a% s* Q& I; A, L4 e
    紧接着 N 行,每行的格式如下:
    + H* T2 b) T; Z6 J
    " h& F" E' `) u( `% V) S( s菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
    6 Z, ]+ h, C, ?, {
    ' `4 ~/ `& l6 }9 E例: " ]1 S' F) N5 V& U, i) }
    . d1 i+ T+ j# A" F+ P/ Q& K
    水煮鱼 30 1 1
    / N( e, Q) z) l8 ~
    / R. s& I# {( ^0 O( I紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 ; W1 `) {7 `5 n4 q2 {
    ) j+ H6 v# v* }1 q* [8 q
    输出数据: 0 r( [8 N* ~- [7 l' B
    1 K) D5 r( F- Z4 ^  l/ T9 T4 ^- X
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 8 F9 A9 G: w- u( B/ A8 t7 T

    $ r( B! l) ]8 J: G9 g0 o说明:
    8 Y% q9 W9 ^  K) A
    $ C' D* o" L7 T0 L% r1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    3 R/ `# k9 w  K. ^  J/ m: a  Q# p* b
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    ! E$ i& A( ?' ~7 z  B% N( F9 K# O2 k9 r7 o6 C$ [+ p
    输入样例


    1 K& I1 ]3 t0 L4 x3 2 2 * b* x% Y8 g9 C& q6 ~! P
    1 u+ h: C3 r, s& }- L
    水煮鱼 30 1 1 $ n. E$ I: ]- A6 L6 j
    2 k( I8 b- j; ^1 S8 P' z
    口水鸡 18 1 1 ) C& e3 A8 N: z, N- y# ^; q
    : ?) e2 Y0 W6 k8 D+ ?1 Z+ ~
    清炖豆腐 12 0 0
    + y+ Y. A' d2 {4 ]3 N+ }0 M. T
    , s3 N" n; c/ ]6 x) V( t, k1 1 1 1 8 A+ C& A5 T7 @# d1 o# E. }* Y4 u

    ) V) T; `0 j! |: _

    6 y5 M) J8 I& ^% q! J! A输出样例


    1 X" C# _- V0 O% \" P( H口水鸡
    7 {  ?  ^8 G0 H0 f) J; q1 f. k$ w$ d. ?" g5 p% `5 }
    清炖豆腐
    1 ]8 \4 _6 c* e/ V
    8 ^% d( _, h' o( i12.00 + [- `" D/ y, z+ A0 u' F


    4 `1 a9 v3 R" N7 c; F0 B" J
    ; C1 R' A9 Z2 @0 H) X8 h8 L3 y! M% Y) {% T
    时间要求: 1S 之内
    ; X6 K: L7 a' L+ v: V0 b% u8 G2 d- ]
    - e8 u: N' d) F8 H( d) T" {! {example:
    5 P8 m( a- G+ R3 c: [#include <cstdlib>
    8 P- p; X! H  c( A! v8 r2 @" k# X+ k0 a+ u#include <iostream>5 {/ e2 E0 g$ [5 x  K% @4 R
    9 b" R6 E. V. a, L
    using namespace std;! `7 M3 a! [5 b+ A% D
    # S- u6 M  Q( M; N+ c
    - d5 m! Z2 Q& Q5 }
    struct cai0 V2 F) z& L7 ^
    {
    5 S0 `3 S/ M& t       string cainame;  z" @) {5 k, ~& I+ z; [
           int price;6 \& I5 @, d5 Q2 L1 M( d$ W
           int hun;
    3 \% |  l) y" y  H5 p       int la;
    0 l! ^5 e" X) l. y2 X% u       };
    / R8 H  a+ }0 kint* alltotal=new int[30];  j# A$ K4 y' g2 B1 g( o' N
    int pos=0;
    ) @  Z4 g- _2 Ycai* pcai;
    % v3 [) \3 @4 G& ?int N=3;  
    ' X* L1 D! v4 w8 f) Ivoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);+ |6 S8 k7 [7 {. p# A% n9 T% _
    int main(int argc, char *argv[])8 U9 Y  |1 m5 ?. R
    {0 d5 i. U) y! A- P) a( ~- J8 R$ |" k
        int M=2,K=2;
    ' t$ F; t4 o7 _$ b$ ^    int a=1,b=1,c=1,d=1;
    6 R; G4 J# g  T( m% Q    pcai = new cai[N];; r9 T% H' T  ~1 m0 ~% j
        pcai[0].cainame="water fish";5 S) j) Z; x' b
        pcai[0].hun=1;
    : F$ ^: e5 o  H. ~    pcai[0].la=1;2 H; H' k6 L/ e; O8 A
        pcai[0].price=30;
    , p4 R$ n) X  @9 g. Q' j$ [4 u    pcai[1].cainame="mouth fish";" ]: m; D) Q/ j6 P0 o& u: [
        pcai[1].hun=1;5 [0 _9 A( G+ D5 ~  S' T
        pcai[1].la=1;0 a7 V1 ?; v  M& x9 }
        pcai[1].price=18; 5 e. U! k- i1 Y$ [1 k% s
        pcai[2].cainame="doufu";1 N# W* H8 }* ?: Z- R0 |. Y( k
        pcai[2].hun=0;
    & L) l6 U4 d9 \5 v( w    pcai[2].la=0;
    ! q: V3 ~5 b4 Y+ {8 q    pcai[2].price=12;
    6 D! F9 x1 |# @; r: D8 E    for(int i=0;i<N;i++). f% \8 b; c! L$ B1 }5 F
        {
    ; J8 \/ o$ k7 z0 T- |& A8 a" Z0 K% `        if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))
    3 {. z( @1 o8 @8 g. {0 z        {& q4 ~& s1 d: y! E7 f4 d
            int ta=a,tb=b,tc=c,td=d;    ; t. x0 U$ s4 G3 Y6 @7 G6 f
            int* select=new int[1];    ( W3 e8 \) I# b" v: h- M: q) d, q
            select[0]=i;$ d- Q" E( R( n9 l2 ?; v
            if(pcai.hun==1)ta--;else tb--;
    ' p9 L* p# \1 ^! P        if(pcai.la==1)tc--;else td--;5 y, N/ y' a$ m# w" A2 A
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);8 j1 E1 ?. [, t2 l& B2 \( V, P
            delete[] select;, i  e( g* Q1 S+ h6 k" |5 _
            }
    4 M3 ^8 {: _! L8 v3 @    }9 J/ K. z( G' \8 U* @( }
        for(int i=0;i<pos;i++). b! i9 o# p* |% a4 c4 h
        cout<<alltotal<<endl;
      T- N" l* n! J! |- K9 C    delete alltotal;
    ) c; Q' T5 Y1 f1 n! y# b: ^: V4 y+ t    delete []pcai;
    3 t" z" |% S: S2 v    system("PAUSE");7 @, T& F4 C  _' \
        return EXIT_SUCCESS;
    : j7 A# I9 R9 h6 l}  Z: r7 r2 m, L
    void fun(int * select,int n,int M,int a,int b,int c,int d,int total)! u$ |, E! P# u) e! z
    {
    ; c! s+ i% G# [3 v& E; P* t    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
    9 G" m/ T) S1 Q$ u8 q    //getchar();! o- W, K# Q* S
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;% P: r4 x6 F; o2 K1 p$ `7 Z
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    ! L6 H4 X/ Y$ r: c/ d    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    ' A9 t, t; f) y    for(int i=select[n-1];i<N;i++)2 L% h$ n1 f" l9 i2 T: @
        {. J; c. r( S& ~0 G3 V! \2 T) j0 z
             for(int j=0;j<n;j++)if(select[j]==i)continue;
    / H. d2 c; A0 q$ b: d        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)). n4 }& N' t& A; f6 N2 M
            {+ U3 l4 B* `* V# Q: a& z
            int ta=a,tb=b,tc=c,td=d;- y& G  z+ L0 Y2 c) g) V% `8 h
            int* myselect=new int[n+1];   
    & e7 @+ o/ {" \' b- Y/ h        for(int k=0;k<n;k++)myselect[k]=select[k];1 i- I: P" j) w$ i' Q
            myselect[n]=i;4 u& ?0 K0 u( `  t. z% ?: Y+ e% v) v
            if(pcai.hun==1)ta--;else tb--;9 @- r# ?6 R, |8 @7 ~9 ~6 d
            if(pcai.la==1)tc--;else td--;
    # D- w1 D8 l" s: W        fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
    . w. g# z6 B0 t# h- }2 U4 V$ X" `6 }        delete[] myselect;! {0 d+ ]. ~  i. P# r  a  ]0 v
            }
    8 T/ E1 N. U* v# Q" R% l1 q; ~5 J    }) P0 Q6 d) }0 ~* x0 O# I1 ]
    }
    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 06:25 , Processed in 0.433348 second(s), 67 queries .

    回顶部