#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define max(x,y) (x>y)?x:y
const int AA=1000*100*35;
int dp[AA];
int NUM[35];
int main()
{
double Q,num;
int N,i,j,q,n,a,b,c,flag,k;
while(~scanf("%lf %d",&Q,&N)&&N)
{
memset(dp,0,sizeof(dp));
q=(int)(Q*100);
k=0;
char ch;
while(N--)
{
scanf("%d",&n);
a=0;
b=0;
c=0;
flag=1;
while(n--)
{
scanf(" %c:%lf",&ch,&num);
j=(int)(num*100);
if(ch=='A')
{
a+=j;
}else if(ch=='B')
{
b+=j;
}else if(ch=='C')
{
c+=j;
}else
{
flag=0;
break;
}
}
if(flag&&a<=60000&&b<=60000&&c<=60000&&a+b+c<=100000)
{
NUM[k]=a+b+c;
++k;
}
}
dp[0]=0;
for(i=0;i<k;i++)
{
for(j=q;j>=NUM[i];j--)
{
dp[j]=max(dp[j],dp[j-NUM[i]]+NUM[i]);
}
}
num=(double)(dp[q]/100.0);
printf("%.2lf\n",num);
}
}
动态规划-最大报销额
最新推荐文章于 2021-08-30 22:40:42 发布