hdoj1864最大报销额

来源:互联网 发布:好看的网络电视剧 编辑:程序博客网 时间:2024/04/29 19:06

此题略坑500MS过因为要金钱数组要成*100,可以用贪心0ms过但没有尝试。。。

#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h>#include<stack>#include<map>#include<time.h>double money[3000011],sum,sm[50],va,suma,sumb,sumc;char a;int main(){   int n,i,j,k,am,i1,kind;  double m;   while(scanf("%lf %d",&m,&n)!=EOF)  {      i1=0;    if(n!=0)    {      for(i=0;i<n;i++)      {              sum=suma=sumb=sumc=0;            scanf("%d ",&kind);            for(k=0;k<kind;k++)            {                if(k!=kind-1)                scanf("%c:%lf ",&a,&va);                else                 scanf("%c:%lf",&a,&va);                if(a=='A')suma+=va;                else if(a=='B')sumb+=va;                else if(a=='C')sumc+=va;                else goto s;          }            sum=suma+sumb+sumc;          if(suma>600||sumb>600||sumc>600||sum>1000)goto s;        sm[i1]=sum;        i1++;        s:;     }     for(i=0;i<=(int)(m*100);i++)        money[i]=0;      for(i=0;i<i1;i++)        for(j=(int)(m*100);j-(int)(sm[i]*100)>=0;j--)        {            money[j]=money[j]>money[j-(int)(sm[i]*100)]+sm[i]?money[j]:money[j-(int)(sm[i]*100)]+sm[i];        }      printf("%.2lf\n",money[(int)(m*100)]);    }  }       return 0;}
0 0
原创粉丝点击