注意数组的大小,以及字符的输入问题
#include
#include
int dp[4000000],a[4],money[400];
char s[120];
double str[120];
int max(int a,int b)
{return a>b?a:b;}
int main()
{
int N,sum,ans,ok,count,i,j,num;
double Q;
while(~scanf("%lf%d",&Q,&N),N)
{
count=0;
sum=(int)(Q*100);
while(N--)
{
scanf("%d",&num);
a[0]=a[1]=a[2]=0;
ok=0;
while(num--)
{
getchar();
scanf("%c%c%lf",&s[0],&s[1],&str[0]);
if(s[0]=='A'||s[0]=='B'||s[0]=='C')
{
ans=(int)(str[0]*100);
if(s[0]=='A') a[0]+=ans;
else if(s[0]=='B') a[1]+=ans;
else a[2]+=ans;
}
else
ok=1;
}
if(!ok&&a[0]+a[1]+a[2]<=100000&&a[0]<=60000&&a[1]<=60000&&a[2]<=60000)
money[count++]=a[0]+a[1]+a[2];
}
memset(dp,0,sizeof(dp));
for(i=0;i
for(j=sum;j>=money[i];j--)
dp[j]=max(dp[j],dp[j-money[i]]+money[i]);
printf("%.2lf\n",(double)(dp[sum]/100.0));
}
return 0;
}
原文:http://blog.csdn.net/lihaogegehuting/article/details/38119195