这道题目真心写戳了...难看死了..没办法,,因为没有专心的去写,,一会来信息了 一会去拿个快递呀什么的...
所以这个写成这样子了...都想死了..可是不想重写了 就贴上去了...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int sum;
int N;//N represents the number of checks
int num[10005];
int dp[5000005];
int count;
int max(int a,int b)
{
return a>=b?a:b;
}
int main()
{
double tt;
while(scanf("%lf",&tt)!=EOF)
{
memset(dp,0,sizeof(dp));
scanf("%d",&N);
if(N==0)
break;
sum=(int )(tt*100);
count=0;
for(int i=1;i<=N;i++)
{
int M;
int ta=0;
int tb=0;
int tc=0;
int flag=1;
int t=0;
scanf("%d",&M);
while(M--)
{
getchar();
char c;
scanf("%c:%lf",&c,&tt);
if(c=='A')
{
ta+=(int)(tt*100);
if(ta>60000)
flag=0;
}
else if(c=='B')
{
tb+=(int )(tt*100);
if(tb>60000)
flag=0;
}
else if(c=='C')
{
tc+=(int )(tt*100);
if(tc>60000)
flag=0;
}
else
flag=0;
}
t=ta+tb+tc;
if(flag==0||t>100000)
continue;
num[count++]=t;
}
for(i=0;i<count;i++)
{
for(int j=sum;j>=num[i];j--)
dp[j]=max(dp[j-num[i]]+num[i],dp[j]);
}
printf("%.2lf\n",dp[sum]/100.0);
}
return 0;
}