HDU 1864 最大报销额

注意数组的大小。以及字符的输入问题

#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\n",(double)(dp[sum]/100.0));
  }
   return 0;
} 


posted on 2017-07-22 19:39  yjbjingcha  阅读(77)  评论(0编辑  收藏  举报

导航