饭团的烦恼 5 H/ ~ |& T9 W4 O8 }$ P
) q V' C" o2 d7 [3 F2 f) |! T; N“午餐饭团“是百度内部参与人数最多的民间组织。 : k9 H( V9 \+ ? w* c
3 I# U% ?- v$ H同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
7 L F( T) H$ c6 y, h. w
0 V6 N. E3 ^- Q% I+ u/ F) {参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。 . V9 {8 d2 d1 V: r9 ~
9 c- q9 L a$ L, K
但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,因为,你们将要为所有的百度饭团设计一个自动点菜的算法。 ) V+ N# o- ]7 U# _5 F
) X+ _* i9 w$ n7 p& X& _2 k
饭团点菜的需求如下: 9 `6 Q+ Y# y x" x
; }0 U% j! V2 P/ ]' }1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近 12 元越好。 ) e1 t/ e0 k q! G
; m) g' w2 C- e) i9 c" ^
2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。 ; g' ~, U; o4 x+ {
' e' A$ D& p3 |8 R4 I2 e$ T
3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。 / Q1 A- x; ^8 x- q! l
2 A; e( T# ~2 z1 S; z& i" c3 ?
输入数据描述如下: 1 U8 F, U D2 u6 I$ u! l X/ n
7 w2 d6 t# M# I& `
第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
% F" Y, P! H. H/ Z- |4 C! [. H) T' t% ?) |$ ~! o
紧接着 N 行,每行的格式如下:
- Q* j1 p. |3 ?+ G8 U, q7 N& a7 T$ q" x
菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
# K/ R# [% n1 C) ~ Q5 N# {+ z0 ^' S2 y) Q
例:
' c7 P- ]" {' [4 ]8 F& s) E! T& H, _6 ]4 {5 N$ _% I) g
水煮鱼 30 1 1
2 D' O- B: n, E e* w& ^, i0 Q2 D$ {8 h3 B( g; [ t
紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
! D& W6 A4 z6 f* i0 R) O( M; Z
' }& q2 G7 g: S3 }: F0 ?输出数据:
3 X9 ^; ]- _: v6 j- c
/ t8 i0 u, t) G" y/ C对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。 0 v4 ?2 D4 U1 R; l: o& U) N
; G6 [" e* V, P3 H8 h# Q0 v( ]说明: / z& |/ P: a$ C g d
% b' C/ I9 P, k8 n
1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。 ! e! H G# n3 d4 S s* }# m
2 S! k. g% B3 K% ~2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
+ W2 T+ r! J, _% z. V$ C7 a; y5 v- z: v9 {/ u! `
输入样例 0 ~' c ]& K" Y( _9 {+ t! Z
3 2 2 1 f9 l. m8 [7 _- d1 w6 z
& F# T6 F% A. _! `# G' M9 W; n( ^水煮鱼 30 1 1
! y. V' p) X: d2 i6 i# p- M: g
8 g' |& {" m0 I# J$ ^: S口水鸡 18 1 1 * n' U* m8 Q+ K
3 e( W7 z. f4 j3 ?8 u) U* ^5 \+ [
清炖豆腐 12 0 0 # L: o2 K1 O( t3 ~; h$ A
7 y' d* D9 E5 `/ C1 1 1 1 & s! j7 c& K; l: n
# T. j8 k. g, s/ n& ~
! R) ] w1 p" Q" n输出样例
3 _# z- `8 T4 p/ M5 ?2 F) q& z口水鸡
: W' v) O. z- Y
% K& ~! w% d; X+ V/ D清炖豆腐 ! T3 R2 Z5 e4 P6 o, `# Z9 ?- `
4 f+ {+ e/ y- X7 G" V) G12.00
- x- v* n: }% n( y* u 5 V+ y6 c2 g; \) t% {- K4 B# c$ C
# F7 m- a: t2 x, [
# V) T2 r! I4 @1 V3 U1 L时间要求: 1S 之内 # I! J4 b% l- h. I
! q9 G( ]' h) H) Z9 U9 {example:
5 _% P5 X( { Z3 @8 v. A+ u#include <cstdlib>1 F1 k4 @5 G) J, {
#include <iostream>& J7 b* e% ?# j5 z: u( v. w
/ t" D2 ^7 o- t2 h/ k; j
using namespace std;* Z7 J$ @* M: I! |! j! ~# @- P9 P- E
# P( |% E# k" w. {
3 Q& H4 k4 x6 Y- H7 t0 W. ustruct cai
: v$ H% T. w& c; l( [$ }4 k{( m' w- L" p8 P+ _1 [/ u# z9 G) S
string cainame;+ y) _& \$ G6 P% X
int price;1 W8 |) K1 U/ L) J/ o3 K# Q
int hun;
1 n" d h# T8 X. c3 r/ Y% W2 _, x int la;) o9 N4 w2 S% c+ C/ F6 d: [5 X# \
};( o: H7 Y! ^- s. |
int* alltotal=new int[30];+ O& O5 u5 T* H! t8 D, a/ p0 r% w: {
int pos=0;/ L0 n+ w! u+ Q( ?/ c9 \
cai* pcai; , x% m& {& T g3 @8 ~: t
int N=3; 4 `* c+ `+ w- `& L+ ^$ e3 ? n! o
void fun(int * select,int n,int M,int a,int b,int c,int d,int total);8 L( H- o. T$ u0 F0 U& q4 a" g, q/ Q
int main(int argc, char *argv[])5 d9 r8 f/ K# u
{8 A% _; W; }6 Y: d1 E9 r
int M=2,K=2; y* d* t4 i' R e) V
int a=1,b=1,c=1,d=1;, U7 C- F0 _% P6 S" y
pcai = new cai[N];
" H' e6 w. S6 R% x2 D. v. Y9 b pcai[0].cainame="water fish";
3 o7 W. l, ?% g# b8 u$ T/ q/ ^+ a pcai[0].hun=1;
8 L0 H% l" r; P6 a* h pcai[0].la=1;6 \: D1 |4 v3 ^9 T' L6 O
pcai[0].price=30;
0 U5 K4 A3 N/ C% J9 g+ i5 C pcai[1].cainame="mouth fish";
' _! v/ e' [3 ~( F pcai[1].hun=1;# W# W! y; Z8 w) L! O" M& G8 i
pcai[1].la=1;
" g+ U( h1 x& P" U. \) c pcai[1].price=18;
& \4 Z8 c; T) ^: p( p& u+ Q$ \2 F pcai[2].cainame="doufu"; i: c& F S4 `5 d& j$ N
pcai[2].hun=0;
* |% V' I* G8 a8 O4 m pcai[2].la=0;
0 f' l0 F/ t2 l1 Y4 W pcai[2].price=12;
& U5 r0 B4 o: B! W/ C for(int i=0;i<N;i++)
6 o6 x0 j1 u6 ~/ r7 J% j3 Y {6 z/ q e" b8 {- W& c9 u, U
if( (pcai.hun==1 && a>0) ||(pcai.hun==0 && b>0) || (pcai.la==1 && c>0) || (pcai.la==0 && d>0))& T2 k1 G7 Y( M7 g3 M3 v% Y( G* B5 b
{
3 g4 Z$ K" A- M1 d: M0 a3 _$ i int ta=a,tb=b,tc=c,td=d; ) p; a' I, u8 c {+ | D
int* select=new int[1];
$ m3 S/ k: Z$ F) U select[0]=i;
: i; }2 E* ]7 e- Q s) c if(pcai.hun==1)ta--;else tb--;
, `! h# S1 V3 T3 O3 B& |! s9 ?& Y if(pcai.la==1)tc--;else td--;/ ?( A$ F2 i' W( M$ q; J1 X0 h
fun(select,1,M-1,ta,tb,tc,td,pcai.price);
! X5 Q5 Z* X$ X% O8 T# j9 X delete[] select;- a# a, {6 l# B% d/ K8 B+ ?* `5 w
}
+ O0 s$ v* j9 [3 G( ` }
G; }1 v8 u3 S# g for(int i=0;i<pos;i++); b \: |5 `/ C9 e( W
cout<<alltotal<<endl;5 m& R7 q F3 C" {$ {. a L
delete alltotal;
( c" l: k) X. f1 J0 h- } delete []pcai;
' r, P) u: d0 e, h+ ^4 I4 J3 R system("PAUSE");3 y- S1 W4 R/ _0 K0 a0 }
return EXIT_SUCCESS;( J5 Z1 b3 A9 X( l$ v
}
. N' `! D# N9 h7 C, L4 P) ivoid fun(int * select,int n,int M,int a,int b,int c,int d,int total), B4 _6 b* a- E4 N9 Q$ A/ s1 T
{$ V6 |: _; o' G; g$ l; G
//if(a<=0&&b<=0&&c<=0&&d<=0)return 0;
* v% v% Y4 A4 [2 C$ [2 X //getchar();
, c) y# A0 M: L* ]. i* {: f //cout<<n<<"|"<<M<<"|"<<a<<"|"<<b<<"|"<<c<<"|"<<d<<"|"<<total<<"|"<<endl;
0 V6 B' z6 n' y$ w& {( ~ if(M<=0 && (a>0||b>0||c>0||d>0)){cout<<"impossible"<<endl;return;}
0 o; ?, A( D! Z" G5 a5 ~3 \ if(M<=0 && (a<=0&&b<=0&&c<=0&&d<=0)){cout<<total<<endl;alltotal[pos++]=total;return;}
8 j A7 [, g) o; N% i" D0 n$ S for(int i=select[n-1];i<N;i++)5 F8 k r, @; F4 v! S
{
! i2 A3 B! h+ E7 u% r' Q8 k# y for(int j=0;j<n;j++)if(select[j]==i)continue;' C' W! `* W x" J9 b
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))7 t& t9 E3 s* z1 M) t
{" B/ } F- ~5 e. S9 X
int ta=a,tb=b,tc=c,td=d;( Y2 ~' A( O' @
int* myselect=new int[n+1]; ' R6 t5 J! w M
for(int k=0;k<n;k++)myselect[k]=select[k];
. G9 ?# |, h% N4 _( A; j myselect[n]=i;
. c1 w: \) V' D0 b: ] if(pcai.hun==1)ta--;else tb--;, p! L2 H5 Y9 L+ c! e, G" ]% [
if(pcai.la==1)tc--;else td--;
; i" \7 z0 Y3 P" X6 p% W/ ~$ i fun(myselect,n+1,M-1,ta,tb,tc,td,total+pcai.price);
* ?" ^7 G8 w7 w8 g C delete[] myselect;1 _0 f% \ C, M+ j; q
}2 Q8 k7 U1 ]) N1 K+ t( j* u
}
: L! M( H7 E0 `3 E2 u& ?; i( P} |