#include<iostream>
#include<cstdio>
#include<algorithm>
#include<functional>
#include<cstring>
using namespace std;
int N,M;
char s,s1;
double Q,t;
double arr[120];
double sufsum[120];
double ans;
void solve(int cur,double sum){
if(cur>=M){
ans=max(ans,sum);
return ;
}
if(sum+sufsum[cur]<=Q){
ans=max(ans,sum+sufsum[cur]);
return ;
}
if(sum+arr[cur]<=Q){
solve(cur+1,sum+arr[cur]);
}
solve(cur+1,sum);
}
int main(){
int i,j,k,m,n;
while(scanf("%lf%d",&Q,&N)==2){
if(!N)return 0;
for(i=0,M=0;i<N;i++){
scanf("%d",&n);
bool ok=true;
double sum=0;
double a=0,b=0,c=0;
for(j=0;j<n;j++){
do{scanf("%c",&s);}while(s==' ');
// scanf("%c",&c);
do{scanf("%c",&s1);}while(s1!=':');
scanf("%lf",&t);
if(t>600||(s!='A'&&s!='B'&&s!='C')){
ok=false;
}
switch(s){
case 'A':a+=t;break;
case 'B':b+=t;break;
case 'C':c+=t;break;
}
}
sum=a+b+c;
if(ok&&sum<=1000&&sum<=Q&&a<=600&&b<=600&&c<=600)
arr[M++]=sum;
}
if(M==0){
printf("0.00\n");
continue;
}
sort(arr,arr+M,greater<double>());
for(i=M-2,sufsum[M-1]=arr[M-1];i>=0;i--){
sufsum[i]=sufsum[i+1]+arr[i];
}
ans=0;
solve(0,0);
printf("%.2f\n",ans);
}
}
hdu1864
最新推荐文章于 2018-04-21 19:21:57 发布