QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12521|回复: 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 |邮箱已经成功绑定
    饭团的烦恼
    * @+ K0 a! u5 y, t+ B" ~" E6 D9 W
    “午餐饭团“是百度内部参与人数最多的民间组织。 ( f/ e$ h$ j4 S2 R  @: ]! \$ |

    4 e+ ?0 h" L  j7 B7 i( W: {同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
    + Q4 L* z8 l. p5 G/ u! {3 Y- V5 f, V
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 4 }- q0 [' n( M/ m# s2 G# r
    5 Z" G' L" Q) g0 w% A( U" O2 E
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 * Y" D+ |: H7 I' l/ _' A5 ~$ Y

    8 B; D2 w* s# J7 n) h$ p8 ]饭团点菜的需求如下:
    ( F' w* p& L" a' h9 h- M9 v
    / l- `* z. g2 O1 o4 ]) d5 z' m1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 ; {# ]: h% P) D" N
    . b8 m" @. m7 ?$ h. ^2 L
    2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
    0 {- f% B( [' ~2 y5 g
      x( _; v2 U+ O) p  ~0 E9 I3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    9 o* q2 b- w/ @8 C' q1 L
    ( `9 f" _( K7 W  b: t! q输入数据描述如下:
    ( t: e5 A' F! h: T
    ' B6 E, ]9 F* Z+ c/ ?; n" |第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    3 g# z: l$ i7 `0 y
    $ j0 n$ y% ^) K, w9 h! b" d紧接着 N 行,每行的格式如下:
    6 K" d, N7 A' O% p1 {7 K
    " r0 I0 y  [/ T. K2 X- C/ v菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) " q1 B5 M. e, r, N9 S
    7 i9 K/ Z1 d* [7 Z
    例: ' a/ j6 Z+ ^8 o7 c
    # ?! o2 E: p& ]) u& O# H  N; ~' A
    水煮鱼 30 1 1
    0 T6 e  j& d/ U. j$ t5 W3 M2 |6 t# u* t6 f3 ?
    紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
    1 d# T0 H3 Y/ y; j8 B3 ~: h7 u# m5 c3 `
    输出数据:
    & x/ ]/ q2 K: x0 ^0 @
    ; S- I2 Y3 [3 h9 v对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。   Q6 q( i7 Q) c  O! j9 }$ i

    $ q( F  r* s! [: \$ h) E; D7 L: Y说明: 0 M' U5 d* L2 m/ I$ z% W/ c; a
    ) {: T0 N, c8 `. P+ P! K
    1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
    . i! E  ^! ~1 j; r) i& I) ?8 Q3 ?, U: x* W: N
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。 ' d/ o$ S" F- i; y! z

    5 D: Z( W8 u, ~, H$ s( z1 n6 \5 i输入样例


    * \# u" {3 W. o; S5 S) J3 2 2
    5 E* b1 O: a/ U" B( D8 l4 Z- a' S$ Q) k. K6 R
    水煮鱼 30 1 1 & _. l" e) A" Z2 s+ r3 A/ D- }

    2 S4 r( \7 I7 }- u  R+ @* m口水鸡 18 1 1
    . v2 z! |8 d8 g+ I% c( m% e$ S' T2 o- H
    清炖豆腐 12 0 0
    9 j% g+ u% Y# Q  G1 m8 W: j% X) g( w* O! r5 T, R& ^, D6 Y1 X! \
    1 1 1 1 ) y8 S/ k7 P6 e


    , ^. B$ |, `8 J+ I8 F" a( C1 B1 S+ ^( t+ x. w) e
    输出样例

    / C2 t5 f7 }5 i) c! V
    口水鸡 7 Y" i3 \. m! P

    1 r% h/ s9 ?4 K2 B" Y清炖豆腐
    ( y  v6 j! T) f, ~- O- o; b2 d0 Q& i. F
    12.00
      g0 N3 ~' r+ t" f# R6 q+ n" H5 J

    6 z8 d- ^* R3 l7 n/ {
    ! S# Q; }+ X( _# K

    $ @. ~9 t" X$ i2 f# g时间要求: 1S 之内   P3 b2 o( v! e! D& N5 h8 A! B4 y! j* h
    ( s8 H# Y2 P' P9 M( t
    example:, O3 G/ W1 Y( ?0 P# i' `$ W2 e0 z
    #include <cstdlib>
    % a( b% G7 M. }, g- a& r#include <iostream>1 B' s, v3 {  |9 |
    1 {- w, b8 d' J5 @6 E& E
    using namespace std;
    0 ]. M' d/ {1 S$ F
    2 `9 S1 ^# W" K2 W8 c
    / G% l9 N0 d! w7 e! I9 Nstruct cai
    5 t  c/ _+ N  c( ]+ U{6 G0 w7 E# D8 X' k% G- L
           string cainame;
    2 w: O# @5 S' B( ?8 q* ~* K7 z: h       int price;
    - G  p. C5 H$ r0 K' G       int hun;4 }$ K; M5 i9 u3 a0 a1 S
           int la;* K" p; T0 _8 P7 ^0 ~/ J' h/ t
           };
    8 K/ H( K& Y* F4 P5 i' @& {1 H2 [int* alltotal=new int[30];
    # L! o7 B1 m+ gint pos=0;4 a  Z% o: D: g# K6 ?) s3 u6 C
    cai* pcai; ; d' k5 t) |1 c
    int N=3;  
    $ z- V1 o& G. ~" Q1 rvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);8 a* X' h9 G. g) X
    int main(int argc, char *argv[])& o% n* I5 \7 {) y: T
    {
    ' @  f; j; y! {3 X8 e* D; ~" Z9 S    int M=2,K=2;( j% P6 \. M( Q, G5 f7 s
        int a=1,b=1,c=1,d=1;
    ! _9 @# b, m1 d* _! A/ e9 I    pcai = new cai[N];
    / f2 |# F, X" T' N  F* c" `    pcai[0].cainame="water fish";+ G6 J0 e3 q& x, n
        pcai[0].hun=1;4 j2 f8 P  E+ ]  T* ^) w* m
        pcai[0].la=1;# \/ d% s! ?6 M! T/ s4 I
        pcai[0].price=30;
    ! F& ~2 C: u9 Q5 H    pcai[1].cainame="mouth fish";6 M1 |9 h* `: z
        pcai[1].hun=1;
    ) o( O7 M7 M- L; q; m/ a" u- z    pcai[1].la=1;
    $ I3 i) n1 c8 e7 @( j7 \    pcai[1].price=18; 1 N& G6 ~; U0 @" t, P4 X  O* P
        pcai[2].cainame="doufu";
    " ^9 L) J  ^" m2 _9 k" E+ j0 g- Q: Y    pcai[2].hun=0;
    8 G  y  Z. u4 c! w    pcai[2].la=0;" `5 o# }3 o( U
        pcai[2].price=12;
    7 q+ @: ?% e8 i3 J! r5 O    for(int i=0;i<N;i++)
      O# p8 @2 x6 q3 i3 C& N    {; W9 G3 b/ x4 S/ K
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))+ S7 ?+ Y0 X; B  g4 b8 C/ \
            {
    " k7 ~4 i2 E# J+ K! i/ n        int ta=a,tb=b,tc=c,td=d;    7 K& F+ ~  ~! X2 m
            int* select=new int[1];    . G; X5 t7 ^' @
            select[0]=i;3 w' N* @# w8 U7 Z' S; U8 A) c( N; K
            if(pcai.hun==1)ta--;else tb--;
    ! ?2 U/ E8 N% C# e/ X% J, c        if(pcai.la==1)tc--;else td--;
    - L$ I1 `& G9 B) _        fun(select,1,M-1,ta,tb,tc,td,pcai.price);7 a* V( {) _1 C8 f8 K" A
            delete[] select;
    5 d& f9 b( [. A  g# {        }
    . c8 U9 o+ O( J' P- A* b    }7 F1 {3 _* ~; \0 X) X
        for(int i=0;i<pos;i++)
    ! W2 F9 I2 ~* X9 L) k8 Y6 j0 X8 `" H    cout<<alltotal<<endl;9 {* z2 k/ d& i0 a
        delete alltotal;# x; L" {8 `( ]
        delete []pcai;3 K: q- i$ j4 `+ h* d/ B
        system("PAUSE");
    & o' f4 Q. W8 w    return EXIT_SUCCESS;
    " z# l1 r& ~" A) z7 V$ \}
    ) T6 i2 o8 \4 [2 l$ E3 A2 Zvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)1 a. q  Y# I  P( c' ^; R: l# n
    {
    7 l6 F  a. P& I) T# Q; V    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;) T" z" G5 a& ]4 [
        //getchar();
    ( l& G4 t" k$ \. }2 {4 k2 r. B    //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;: g' `. n$ e) U9 C: z
        if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
    3 {9 w) j& N' X$ b2 c    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    ) u8 y: U$ `) e9 C- Z  b8 w    for(int i=select[n-1];i<N;i++)* x* g- ]& ~7 D
        {
    6 Q3 H% f0 S; H* B- X         for(int j=0;j<n;j++)if(select[j]==i)continue;
    - |9 Q0 l% R- t+ {+ 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))( R7 |# f/ F3 N! Z: x
            {0 c: Q( M) i) L$ D9 H
            int ta=a,tb=b,tc=c,td=d;
    0 z; j+ [' Y# ?* g) d        int* myselect=new int[n+1];      e& w: ]- n4 j
            for(int k=0;k<n;k++)myselect[k]=select[k];
    4 L6 s0 D: c+ j# P# x9 d        myselect[n]=i;7 t& M0 a& ~9 _5 h
            if(pcai.hun==1)ta--;else tb--;( Y  Y) a* d, L& r6 e! _
            if(pcai.la==1)tc--;else td--;+ v; s. F- H0 p7 s% y
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);8 x6 K1 y0 A+ x+ g" g& M
            delete[] myselect;
    , s3 E, e- S% P& K7 i        }
    9 q* \+ {& a' x* G    }
    * h) D1 {0 {) q) A; ?1 e}
    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-24 04:19 , Processed in 2.067803 second(s), 56 queries .

    回顶部