http://acm.hdu.edu.cn/showproblem.php?pid=1864
#include<stdio.h>
#include<string.h>
#define max(x,y) x>y?x:y
int dp[3000050];
int main()
{
int n,num,i,j,k;
double pri,total[40],sum,pra,prb,prc,sum1;
char t;
while(scanf("%lf%d",&sum,&n),n)
{
k=0;
while(n--)
{
scanf("%d",&num);
sum1=0;
pra=0;
prb=0;
prc=0;
for(i=0;i<num;i++)
{
getchar();
scanf("%c:%lf",&t,&pri);
if(t=='A')
pra+=pri;
if(t=='B')
prb+=pri;
if(t=='C')
prc+=pri;
if(t!='A' && t!='B' && t!='C' || pra>600 || prb>600 || prc>600)
sum1=1001;
sum1+=pri;
}
if(sum1<=1000)
{
total[k++]=sum1*100;
}
}
memset(dp,0,sizeof(dp));
for(i=0;i<k;i++)
for(j=(int)(sum*100);j>=(int)total[i];j--)
dp[j]=max(dp[j],dp[j-(int)total[i]]+(int)total[i]);
printf("%.2f\n",dp[(int)(sum*100)]/100.0);
}
return 0;
}