注意数组的大小。以及字符的输入问题
#include<stdio.h> #include<string.h> 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<count;i++) for(j=sum;j>=money[i];j--) dp[j]=max(dp[j],dp[j-money[i]]+money[i]); printf("%.2lf ",(double)(dp[sum]/100.0)); } return 0; }