QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 12331|回复: 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 |邮箱已经成功绑定
    饭团的烦恼 9 K9 K6 z( i+ r$ e( ^" U
    0 M8 `, N/ E9 L( j( Y6 P) p! X8 `
    “午餐饭团“是百度内部参与人数最多的民间组织。
    1 ^  {& J# f  J8 L, f
    7 j$ l# X7 _6 i1 n3 [$ q; Z* i同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
      `" m- p) g4 a- f3 c8 z+ @, `: v. C
    参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 ' D! Y, X* G+ Y4 ^' M3 C' |
    / g7 U/ Q$ o* z: Y$ Z
    但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 # x3 n9 D% {- [6 N; O/ U

    , a/ I! A3 S1 r% l9 j2 a( [0 E饭团点菜的需求如下:
    % q* b3 t4 E& j: O# q) I+ W) o, _1 Z) {* @
    1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
    ) j! i" m0 X" n9 Y" w
    - f; Z- b' h4 F" p3 k' z2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 $ p, {" J# b* _' @' D

    $ u5 X6 }7 U& e3 p# k3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
    0 m" S$ T0 J6 _. V
      f$ D; S& a: ], T: |& \输入数据描述如下: ! x; X5 y6 @9 G. Y7 h" |

    * W; z' j# X4 E- I$ M第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
    . x' W* [. [$ H, {6 E/ V
    ; N, @$ S  v- ~. `/ ]紧接着 N 行,每行的格式如下:
    9 @, a. d1 R8 `9 N4 K+ E, ?( P5 g) D  D  r8 o7 x( d
    菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) ; a- M& E* ~6 j# D* R5 x

    . ]9 w' a; i# R! z. B例:
    9 z( f7 n6 |  P: {5 L$ d" E7 ?2 a8 q) U2 a( |7 J. c" q
    水煮鱼 30 1 1
    6 n0 D9 R7 z) z, U$ X
    ! ]- U, d! Z9 _8 ]% @紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 ) }5 ?# n# H' J2 I8 J0 X& T) E9 N

    5 c, x" O: a5 P# w输出数据:
    ! n2 q2 n! x# F$ w8 B& s. X4 E6 {! o% U- [4 y/ v3 S: c
    对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
    0 n* v7 e7 u/ {0 h# ]. e* L6 [5 d1 l  a7 [3 Z0 t+ ~: [5 q: G
    说明: " v) X" @/ W) Z: ?% K

    # B' a  X0 Z3 j- }4 Z7 ]. W# m1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 $ s1 m0 {8 c3 ?) T8 }1 Z9 D
    5 p: n% T1 R2 v- y
    2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
    , G- h8 V3 G' U: S- S) f) J* `! ?( Y* Q0 @2 e" @" Q
    输入样例


    7 h  Y! }* P: ?/ _+ l3 2 2
    , [& a, D9 x/ e1 P; n) t- J: a; F$ k) [5 q" f' K- b  X* L
    水煮鱼 30 1 1 - K. ?' J- I8 T

    ! L- M( U0 C7 Z6 ~" h* O# z) l  p口水鸡 18 1 1
    , {- o  g8 @9 ^+ H9 j8 z- g* Y0 H( J* c6 j
    清炖豆腐 12 0 0 : W- e# M+ r9 Z" Y6 b/ Q- H- P: P% [

    8 l7 S" V' p' A# F3 Z/ s1 1 1 1 * D0 X3 j! \0 b/ X& L+ Y6 E! y


    - ~/ d( O" h% u9 z4 e% ~/ U; G& p) u, M* x/ [5 g5 q1 c
    输出样例


    9 M0 x0 y  \5 K9 T口水鸡
    3 t& i( J$ t0 X2 R0 [
    , F8 \7 }' d: W! s2 }% O清炖豆腐 * o9 u4 H* ?2 R. d
    , B/ N8 u9 N( b8 O$ Z8 u# n
    12.00 - d" g1 F2 o# R/ b& k1 }2 B


    1 X# e: _0 s7 J, `) a9 _1 X: m! B% E; X' E
    4 K# |! Y7 t3 u& x2 t9 C. l# @
    时间要求: 1S 之内 0 u7 N3 f1 i5 x
    - @5 h8 d, M, T0 j. B) q
    example:
    9 ^- s$ u+ z3 R* j& U. Q2 K2 O#include <cstdlib># M- ^9 b' v( _& H7 X# D% j( U
    #include <iostream>* `# g& Y# k  f7 n) X

    6 _! D6 {# V- y) f# q7 g% [( H# Ousing namespace std;
    , U5 X  u- M. H" U1 a
    ' I* v/ j+ t. [+ i6 y3 p: W( d, y. [% p" f
    struct cai
    $ r( ~9 z1 E( P/ `: o{
    , _: r4 ]6 g) Y$ a: R       string cainame;
    6 U/ @/ g) n2 Q9 C       int price;
    - s8 }1 r0 k9 |0 d       int hun;
    7 g' |$ V, b6 B3 d       int la;5 {$ t" f5 ?2 }2 `2 V
           };5 I7 O( ?) V) b* U, L9 j
    int* alltotal=new int[30];
    - x/ S8 |) a* E- B. V1 lint pos=0;
    ( y( A! I9 b, L1 `1 tcai* pcai;
    2 @! s5 M& N+ Q  B9 G8 mint N=3;  
    4 K2 M. ^  K3 Q* Bvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total);
    5 p) j3 m6 S& V7 T* Y5 b% X' uint main(int argc, char *argv[])) K7 R% [4 U& p: n% ^6 h+ n) [
    {0 s* o: t' |( L) ]) [  W
        int M=2,K=2;
    . b- b0 E0 H; `4 g1 o1 t! w6 f    int a=1,b=1,c=1,d=1;9 q4 \9 u4 n. {8 B, R3 E0 z
        pcai = new cai[N];
    2 Y1 M! h8 ]2 s' \+ Y    pcai[0].cainame="water fish";
    5 l0 h/ e: ]- p& {    pcai[0].hun=1;
    2 g& _4 N& Q) t$ V' z0 ]    pcai[0].la=1;6 w0 u1 g% K  c5 b$ m/ h
        pcai[0].price=30;
    3 {" {( P5 R! P: E; i# |    pcai[1].cainame="mouth fish";
    , I3 S# |4 X1 r% u5 S    pcai[1].hun=1;* r0 w; R5 F/ L3 Z6 E
        pcai[1].la=1;
    . q; \$ f3 ~. M. C    pcai[1].price=18; + ]& ]3 w0 ?1 A# o
        pcai[2].cainame="doufu";
    * J! }' R. R0 Z    pcai[2].hun=0;
    & S& X$ @: X4 A+ L    pcai[2].la=0;; h: G- X3 M  G4 @
        pcai[2].price=12; & s% b) x# o" f2 c$ T- v5 n  e- G
        for(int i=0;i<N;i++)
    6 {2 |! [* p2 M8 l    {3 Y. }/ ?' v- d8 t+ k  V5 {
            if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))8 L0 K' ^3 C( e# m
            {
    . L9 F/ S# ?8 {7 [; [4 `6 W        int ta=a,tb=b,tc=c,td=d;    , l. J, o( {' ~* y9 l1 U% M% ~
            int* select=new int[1];    9 M5 ]) }+ B. [. ~2 G3 a& M
            select[0]=i;
    2 e/ M- l0 T$ D        if(pcai.hun==1)ta--;else tb--;
    / ^  n; ^; L6 V9 c/ s1 a$ F        if(pcai.la==1)tc--;else td--;6 Y6 M: J5 E% J0 L6 G0 H
            fun(select,1,M-1,ta,tb,tc,td,pcai.price);
    5 ]0 N5 B6 c* a4 {$ Q! g        delete[] select;
    ) L; H# s# G/ s- q3 j        }
    / a' Z9 T7 G) \/ ]    }3 y7 C/ C: j4 l' [- ?8 z) M
        for(int i=0;i<pos;i++)) I+ x8 x$ ^+ A6 ]) V% z- K
        cout<<alltotal<<endl;
    9 U7 ^, o3 M* L9 i: ~    delete alltotal;
    1 U' ~4 }2 v3 N* E    delete []pcai;, Z! l  F) S" N5 l5 o9 f
        system("PAUSE");, o% {+ u5 G" k# T1 j) H3 J8 f
        return EXIT_SUCCESS;0 n8 c- [6 w6 A- H: H9 f
    }
    & q7 |7 t* e- m* @void fun(int * select,int n,int M,int a,int b,int c,int d,int total)
    ; U$ i, y) l. `' S3 }) o4 y{
    $ j1 V- a  F- E$ S0 w! X% h    //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;/ V! v; i& F/ @
        //getchar();! \0 H9 ]) S- B" b0 |0 S2 s- b
        //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
    / h# Z& F0 G2 c% b" {* z    if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
      a8 ~$ O* _# u2 Y& l5 h4 b6 U    if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
    6 Y  a# R4 F- ^, }* B( n5 ^& r    for(int i=select[n-1];i<N;i++)
    + A9 t* a$ \! h5 b( O' a    {
    " y7 ~/ r; H  ^1 A6 @         for(int j=0;j<n;j++)if(select[j]==i)continue;
    4 v% B% e0 w4 d4 t4 i7 X. i+ K) \3 M        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))
    ! Y% R+ `9 p# l: J& e6 e5 {        {( e2 s  H/ J# p! A. k- m5 k
            int ta=a,tb=b,tc=c,td=d;
    2 x# v1 I0 a9 |/ ?        int* myselect=new int[n+1];    ' ^! ?1 ]" `! z
            for(int k=0;k<n;k++)myselect[k]=select[k];' w9 i- T  O4 Z+ i
            myselect[n]=i;% K. r" k  H! e, S+ j
            if(pcai.hun==1)ta--;else tb--;4 z* S* }; y" M# Y. Z
            if(pcai.la==1)tc--;else td--;( q5 e0 r+ P: C4 v
            fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);' W' a7 d5 X3 A2 ]0 g8 ^! U- f8 s
            delete[] myselect;
    2 I' ], G) _: G+ v7 K9 B5 J        }
    / x/ k! E. m6 r* Z4 i    }
    ) o/ s' W. [2 W$ N9 S}
    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-4-22 14:57 , Processed in 0.435600 second(s), 67 queries .

    回顶部