数学建模社区-数学中国
标题: 2006 年百度之星程序设计大赛初赛题目 1 [打印本页]
作者: 厚积薄发 时间: 2010-5-6 18:56
标题: 2006 年百度之星程序设计大赛初赛题目 1
饭团的烦恼 5 d) w7 G' m) g* e
/ y1 B4 j% k# F/ v0 b* L“午餐饭团“是百度内部参与人数最多的民间组织。
# l6 b. P) i- |! n9 Q0 U7 [ V# x* g: p( G
同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。 3 r/ s+ j/ ~; R
* m( f: R) K/ T d R7 e参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
4 W, |# A# j7 }" _' U
- L& Z8 g: ]/ |8 H5 g但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
9 ]8 P3 U: e3 Q5 I1 M f. A+ H* S' P
饭团点菜的需求如下: ' P" [! }% |" m+ T0 K8 Z2 W
J! p& l* F3 S# n* y" K
1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 4 ?7 e# e5 y9 I$ r8 @. S
7 z( u. Y( f, u2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
. P5 @4 _0 l1 [0 E3 J! o+ J1 n m
/ x j( S( Z! ^' C: p3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
5 Z1 B" V# B& s8 d/ }1 t% \9 Q" f2 k
输入数据描述如下: # N/ H8 C. x O/ [0 p* {
3 D* s2 z$ L& y1 L8 o
第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。 : Q8 y& p! ?& a( F
- U/ @( Z% c9 A9 A紧接着 N 行,每行的格式如下: 6 a% Y, N8 V3 `7 }/ ^# i& C
* e3 i# u4 l; F8 |' `1 K. U9 _6 Y
菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否) ) m0 K8 y5 q$ N/ I
0 a$ c; c8 h& r/ ]! K& a例: 8 v" [- C/ j% O/ i
5 g. p/ V; Z# p2 W. d3 Y9 \( D水煮鱼 30 1 1 $ k# \' c& Q6 q4 H# |
+ Z( h# l2 u/ {% g& a d/ q7 [紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 - k, p2 b# Q3 {$ y$ O
/ n0 ^4 Z, B( m* d1 U
输出数据:
0 [, T& t6 v, @; L; R* P3 @" v- i U- }& e& T! e# _# v K
对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
! X8 ^+ z' _# O
3 H- p/ l C" u, d& s! a |说明:
! I9 X6 Q5 m; O- y) |. @* Y! j- V% K; z) E$ X- N! T
1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 5 n! R3 ]0 L: Z' b# M
. z- [5 T: g2 k$ M, T2 j/ ~2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
( i8 N7 ^ k8 b- `) ~3 j& g# k+ f' ~% X/ h
输入样例
7 p( j8 g( {- j/ D3 2 2
) r3 _% D& T) ^5 `0 U) L
" X$ B* C# k( |) R水煮鱼 30 1 1
# n; z. g# |2 Y1 n+ g
& I( {1 q2 l2 H6 V7 H& m口水鸡 18 1 1
+ @4 e$ ~/ W: P; M9 d( ]$ ]: @7 X$ J% [; a l8 A% U
清炖豆腐 12 0 0
, K: y( \- l/ G& _( Z# o/ W4 k
' ^& f2 L, U6 ^6 ^5 c1 T1 1 1 1
& j2 ], v4 O- l: o4 {1 N+ k
/ q% v, p$ q5 Q
7 ~1 Y6 W6 K, k输出样例 " j7 [7 Y+ ?' [. m. N! c9 Z
口水鸡
7 c8 G' }( K( {! H$ z! |& n; U0 x' p
清炖豆腐 8 L0 w* [7 w/ b' t
: C" z* w* w7 L+ x) {% q12.00
3 I, G0 }$ o- W; v
4 M5 N8 \+ S( K& k, j
8 t+ |6 ^$ W4 a* x! V
9 e# P: e; @/ L- N. b时间要求: 1S 之内
" n4 Z$ {4 P1 r2 e
. ?# x, G' [- e2 Texample:
% P# P, I4 [7 F#include <cstdlib>
0 E9 @3 ^6 Y) }# }, i+ Z( e- k q7 {#include <iostream># u" Y4 }, n: z/ ~/ H0 E
; e8 R( H7 @8 u
using namespace std;
$ d( D! d! \3 c/ M% k$ f
6 z% S9 Z0 t6 R! V( j: K1 j" s, F* C! I4 j# {% s o9 o1 k3 k% \- p
struct cai. O! C# a2 v* {9 U8 F
{8 n+ A4 w5 h; n, P6 C
string cainame;5 R- l/ p7 I6 q
int price;
5 |- D8 H+ _2 a2 H% D int hun;
3 t$ ]) t1 \9 V int la;" D6 y" x/ v- k z
};7 {6 O# p8 B$ u* `, K4 K! n9 S
int* alltotal=new int[30];
& h1 |2 `( x# ]int pos=0;, `* p( U) l: b6 T9 T
cai* pcai; - ?9 J: s- ^1 ~7 Q% }1 g6 O
int N=3; . G# {% |6 I' D) O* U
void fun(int * select,int n,int M,int a,int b,int c,int d,int total);
2 B6 `& i1 A1 k1 G9 h- B* `8 A3 Qint main(int argc, char *argv[])
) @9 \- H1 T, S M{
; m) r- k" w; K0 C6 n int M=2,K=2;. o# K+ U( Q$ t1 U. d% e% ]
int a=1,b=1,c=1,d=1;) O a: |+ f8 ~) G" K0 P
pcai = new cai[N];
, x- _3 \- K. `* |- o) ~ pcai[0].cainame="water fish";& [4 O1 ]- {0 T
pcai[0].hun=1;
/ Q8 d/ t8 s8 v4 p, i& h pcai[0].la=1;
1 m4 o& ~, g3 X0 |& {, B pcai[0].price=30;
( E1 V0 S$ u: \5 g. c3 v" U3 } pcai[1].cainame="mouth fish";
* w# }. g7 z6 d pcai[1].hun=1;
8 m. B* a k% B+ K) v( R pcai[1].la=1;8 ~+ T# q; |$ v5 s: b) A
pcai[1].price=18; 0 e/ X0 N- F& `- z
pcai[2].cainame="doufu";
% J3 I b4 w9 X, w+ x7 \ pcai[2].hun=0;4 ]( ?% ]/ R- H: X( j7 h6 W" ?4 F
pcai[2].la=0;6 G6 \7 v; p ]9 |' I2 L7 s
pcai[2].price=12;
B/ ]. ^, a# } for(int i=0;i<N;i++)
$ a! p7 F7 v7 T# c# T6 O {
( j( V1 H1 y5 N! y0 U( h. h; B8 b3 [ if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))' b5 n7 P2 e7 l/ k
{/ l4 ]$ X: C9 Z) U
int ta=a,tb=b,tc=c,td=d; 7 e# K3 j( Q: Z7 D
int* select=new int[1]; % i; ?$ g7 S. f, [+ F4 J% V4 T
select[0]=i;1 H8 y$ r$ m8 X# l I, ^
if(pcai.hun==1)ta--;else tb--;
& f6 q1 A. }3 d3 c9 ^% w4 ] if(pcai.la==1)tc--;else td--;0 K0 M/ R+ j' C1 n
fun(select,1,M-1,ta,tb,tc,td,pcai.price);) [' ~3 P1 q, W" v. z! h8 ` I# N/ K
delete[] select;! t( U$ r2 ^, ` M! m+ a$ e! p
}2 G* y! N& O: }6 P9 L
}
$ a5 `9 o. c! \) t; G for(int i=0;i<pos;i++)8 @; M! M* A! { E ~, P- F
cout<<alltotal<<endl;
0 j, g# H1 g% X delete alltotal;
- N* H7 ^! n1 x: D' A* j delete []pcai;
# J$ b8 }. _% @8 b& } system("PAUSE");
# l2 N t( B2 T return EXIT_SUCCESS;
% k. l0 l1 a; {}
! f0 s G8 h0 Z% Q) i0 Uvoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)& I" Y: z% ?6 b9 t( e9 L
{
1 q S4 l( F, ~% e/ V% m1 W //if(a<=0&&b<=0&&c<=0&&d<=0)return 0;* o7 R' S4 X5 h
//getchar();
6 `& \2 g9 E, H4 P& a r$ Z //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;5 G/ d, [3 C1 F( L1 q2 d! ^: F
if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
0 E1 H. d. h- k3 v if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}3 k5 V; U& {0 p- [
for(int i=select[n-1];i<N;i++)
% r) H& T% H: `! Q/ l+ l {4 B7 n* N h4 y; L. F
for(int j=0;j<n;j++)if(select[j]==i)continue;: U( I6 a: p! N& A- r$ X. N
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))
3 X$ ^# H& {2 `( s6 b5 y {
, U. h# G0 x9 |. A8 n int ta=a,tb=b,tc=c,td=d;, j" D( N& T2 y( m+ t8 c0 f7 ?- r
int* myselect=new int[n+1];
* |' o/ b. l R1 Q; z& g# B for(int k=0;k<n;k++)myselect[k]=select[k]; T) j2 e* q# ^& r n
myselect[n]=i;
. G* R8 b: P9 A& O if(pcai.hun==1)ta--;else tb--;
! e5 M9 L' X* I( ~9 D: { if(pcai.la==1)tc--;else td--;" E5 S0 I% ]5 B( Q
fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
, f+ R) U( W( u+ y$ Y. g# ~- B delete[] myselect;
; I2 G& C2 p4 P; A }% r- l9 c) L8 q# Z5 R; r+ w+ V3 F
}6 C( m( W# C* f
}
作者: 928171481 时间: 2010-10-9 17:09
嗯,不错不错
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |