饭团的烦恼
- S `) u0 [" U: j% u. y
9 V0 E, u3 j) {- e“午餐饭团“是百度内部参与人数最多的民间组织。
$ N1 U3 N6 Q4 q4 R1 Q! Q+ R
0 a8 @8 E! D' i1 _/ A! I" ]# A/ s同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
~4 Y8 u4 m; p) |( W5 N8 S# D3 n7 B* P- I6 N
参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 : d- ^7 C, f# F& t' r
7 ]# A$ ?% ?- ~% {! C但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
9 P2 U! G! Y! N' k* u# j. d
: m6 c& P% h7 M饭团点菜的需求如下:
# B( U8 F* H; R4 \6 v! y4 g# v$ s( Y; Z' b
1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。
, c) `; k& l- r0 w
7 F/ N( Q0 M/ J; r2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
* v& X2 m2 p/ q* k0 X5 m
; A7 A) y4 p. g O7 X; l9 R3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
% L5 R+ w% H& `. }4 S1 o* I5 b$ v8 Y, F& N5 p* Y8 j
输入数据描述如下:
! _; i& n& c- u; j! E0 u$ o. a' Y' J5 s, H3 z' y
第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
9 u2 u: l3 X0 j# R8 A2 T$ |( M* z W7 b: L$ o
紧接着 N 行,每行的格式如下:
`2 e I* b1 H8 ~+ ^( y7 N. m! b9 [) f; w: @' M8 i
菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
3 g3 a, o3 K4 u8 K# y- z2 P% S3 D0 U$ x( A- ~
例:
; G) i1 f& e( e& q- W0 y
; L+ K8 j6 }# l% n: u! }9 ~8 A [1 x水煮鱼 30 1 1 8 v1 t0 U4 |! t: i$ m1 v
5 [+ Y2 E7 H0 K- j" U& V0 V/ Y
紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。 y0 ]' [; ^5 D( G
& i) L; @* T& Z$ B/ ~# ]输出数据:
' L) Y4 p. t V* T5 @# n/ H6 w- w7 x% W: W s
对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
1 x+ \5 Y& m( E5 v" S
( W/ b! {& u7 \+ `8 ], s* v说明: 2 c% V: \& C7 g& N
) R1 P, V. b3 P, V% K
1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
/ p/ \3 ]' W( W3 X ]. L1 a, W# q) J4 X8 x" V/ P& }
2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
1 @, ^/ E4 ~* {+ r
2 c, L8 y4 m; R, J4 g# T) r输入样例
- G/ ]. {2 b# {, P0 j( q: R3 2 2
`2 v \* W" c4 \% C
0 ]) r! G% p$ y1 N9 f水煮鱼 30 1 1 ' a) D- T& {! s
7 N2 w4 w+ U/ R" |
口水鸡 18 1 1
$ x2 l+ a6 r8 G8 T7 `) n# F1 Z \% `; f& a) A
清炖豆腐 12 0 0
$ d" e$ j! c, f* U& Y
, Q% m1 }( H3 _3 N. c1 ~1 1 1 1 ; y( o* e2 K# s
8 E4 c* Y# f- Z/ G9 r- m
6 Y4 z3 v2 |0 B% q输出样例 / O1 g! B4 V; B! q: [' c
口水鸡 ' T$ n7 F; k% x/ I: L1 F& g
4 j$ B Z; R& |3 k8 c! t, \8 t+ b
清炖豆腐
; c9 u5 j( U" i" m/ T4 {( ?1 d4 M$ H6 j: f$ f
12.00 / @& }: U6 B! U! G% C Q+ x( N
& u# T' O9 _3 W' A( g: j
$ G5 V$ A; C* X! | M# A, ~
) ^0 h+ D8 w, L9 I时间要求: 1S 之内
6 O. i/ R6 n8 J2 R- F7 {! h: P
' R( _" |/ P$ X" c2 K* Gexample:* h+ J2 c$ `5 u$ ?+ L+ r( _/ ~* M/ I
#include <cstdlib>
% ^) K* I* ]' _+ ~( {#include <iostream>( Z* o0 j0 i0 ~" @1 m
; T- \3 U2 h( }/ e0 xusing namespace std;' G" H' p, n. r9 N# t2 a# I+ y
( G' j+ f4 u; ^! `# K# Q5 U. d# k3 |. J2 I' O! f3 L; m1 o
struct cai
- `1 x7 U+ u& I4 d5 T{
+ E ~, ^4 }' E8 }+ k string cainame;
7 H( ~. _$ K& n$ V$ ? int price;" u% c- b2 n3 V( W# O9 W( [- e H
int hun;
' j$ J: h+ Z# x: c' }0 S+ o# J& o int la;
0 J: B6 m2 }6 E8 e: _. b };
Z( v/ K% v& kint* alltotal=new int[30];* B9 f e8 D H7 \4 r
int pos=0;7 O: F/ e1 r+ M+ p2 H- L
cai* pcai;
: ~' \+ K$ r& E. V2 Mint N=3; ) @) l+ U) o8 P" z! v
void fun(int * select,int n,int M,int a,int b,int c,int d,int total);
- K# |( n! X5 D/ E% Tint main(int argc, char *argv[])" g' o e0 P, v+ t& c3 g
{( _3 {$ g" {# u6 W: d% A
int M=2,K=2;5 i9 w; L( e0 c: w
int a=1,b=1,c=1,d=1;9 X8 p6 o y8 O. d2 Q3 s# m% k
pcai = new cai[N];
2 O% Y* @4 e; M' p$ c0 n+ b9 K pcai[0].cainame="water fish";: c9 ^- B7 E& S8 u0 ]% Q7 ?$ Y# J
pcai[0].hun=1;
9 w+ r3 `, o A! q9 V8 j" i) U2 j4 O pcai[0].la=1;6 E+ G) b" L! P2 p- R
pcai[0].price=30; Y/ _2 ?9 b2 I+ X4 X9 e% X
pcai[1].cainame="mouth fish";
& y% m1 g, u1 K7 q& E pcai[1].hun=1;/ D) U' L1 d: a% B/ T5 y* P0 Q
pcai[1].la=1;9 H) p+ H% K$ x* l+ a" y
pcai[1].price=18;
, @: h' g; P* c1 G3 \9 z/ ] pcai[2].cainame="doufu";
" T* E, ]( ]/ E; ^2 H/ S. ~ pcai[2].hun=0;3 V- j7 O* o% Q' N, @% S1 F& c, j
pcai[2].la=0;) s" U4 j6 V6 D9 Z4 K
pcai[2].price=12; ; G2 p# `3 E( R
for(int i=0;i<N;i++)0 n' B! W w& g
{
! m9 ]1 C' z" y6 H. u if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))# I# {* v4 k" a. ^, L, r
{
# h$ I+ d I' ^8 ]! h4 U% ?4 K1 ^ int ta=a,tb=b,tc=c,td=d; M2 ~7 {/ A5 h U& N
int* select=new int[1]; % V2 n7 ?: r9 P2 l4 g
select[0]=i; I+ \- B; X+ c: E" o
if(pcai.hun==1)ta--;else tb--;
5 x. r: Q" M5 M3 i8 S; [8 ` if(pcai.la==1)tc--;else td--;( w K' c+ w4 @ e' y+ S I
fun(select,1,M-1,ta,tb,tc,td,pcai.price);
# K: ~" E7 i! t* ]3 ^5 Q" s delete[] select;
. h8 A1 D4 J" _5 ?. i }
3 a# n3 U) @, s/ s }
+ n, h/ t) O: U& ^( _ for(int i=0;i<pos;i++)
; M1 x6 N; l6 o# n( ]" K+ o cout<<alltotal<<endl;
& e0 D, ~. y2 [ delete alltotal;
4 \$ y3 ?2 h9 c1 |. H5 E delete []pcai;' T7 Y0 Q) A( r+ r2 D) p
system("PAUSE");" O" i6 A/ u. W8 k; @
return EXIT_SUCCESS; _! T% b; K; K6 F9 l, I* V. U
}
! e- d0 K; B5 F/ C* z9 W! Ovoid fun(int * select,int n,int M,int a,int b,int c,int d,int total)$ M" p+ a; Z0 `
{: `8 i Z6 A( I- d
//if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
# b' D# F+ o0 d/ w- h //getchar();
$ G- B# y7 y6 B- V* W$ [6 Y8 E, Z; v //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;! m, y' s" P4 f/ n
if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}7 _$ E. ~6 u* i+ Y L
if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}% @8 J1 e& x: C7 N; A! }
for(int i=select[n-1];i<N;i++)4 a9 M6 a8 Y/ Q% K' M/ n+ D. Q
{
( Y5 Y2 j, g3 ?+ V* z6 V% _# _ for(int j=0;j<n;j++)if(select[j]==i)continue;
8 c. i3 i, A1 l3 K* 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))! t9 j* w, Y1 y4 H' b
{
$ g# }1 R/ g4 [ int ta=a,tb=b,tc=c,td=d;# o, m0 h# d; a- D% m0 Q* \: x: h
int* myselect=new int[n+1];
) _" ], \. I" W- V- N) Z' i3 A1 Y A for(int k=0;k<n;k++)myselect[k]=select[k];8 l! a$ e% W1 \, y' N
myselect[n]=i;+ Z5 u4 D- ]7 C; l& X
if(pcai.hun==1)ta--;else tb--;
: V- @9 o" m7 K6 q8 C! j/ Q( Z if(pcai.la==1)tc--;else td--;
3 I+ N" k$ t# `8 Y fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
7 V T; I8 ~8 t delete[] myselect;/ t* Z/ n+ L1 ~5 X+ @ J- G
}. o1 J1 X" a3 r' I
}
$ G6 `0 g4 W% {* h$ ?5 b} |