饭团的烦恼 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} |