这题题意有点坑阿、感觉特别模糊、
我开始有一点没理解清楚、就是报销的话是整张整张支票报销的、也是我傻逼了 没一点常识
还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以为是题目数据会这样给、 没想到还要自己判断
并且不符合条件的支票要直接舍去、- -、只能怪自己题目做少了、 没事还是好好刷题、 纵使别人放弃 我也不允许自己放弃
这题的输入数据全部都是2位小数,可以直接化为整数处理
然后就是裸的01背包了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int qq=+;
int dp[qq];
int p[qq];
int main()
{
double tot;
int n;
while(~scanf("%lf%d",&tot,&n)&&n){
memset(dp,,sizeof(dp));
int sum=(int)(tot*);
// printf("%d\n",sum);
int count=,m;
double x;
char s;
for(int i=;i<n;++i){
scanf("%d",&m);
int a,b,c,flag;
a=b=c=;
flag=;
for(int j=;j<m;++j){
scanf("%*c%c%*c%lf",&s,&x);
int y=(int)(x*);
if(s=='A') a+=y;
else if(s=='B') b+=y;
else if(s=='C') c+=y;
else flag=;
}
if(a+b+c<=1e5 && a<= && b<= && c<= && flag)
p[count++]=a+b+c;
}
for(int i=;i<count;++i)
for(int j=sum;j>=p[i];--j)
dp[j]=max(dp[j],dp[j-p[i]]+p[i]);
printf("%.2lf\n",dp[sum]*1.0/);
}
return ;
}