/*
hdu 1864 最大报销额
题意:每张发票总额不得超过1000,单项物品不得超过600(一项物品可能出现多次),除ABC类外,其他的不能报销(含多余项的发票整个儿不能报销)
所有价格扩大100倍,按发票经行背包
*/
#include<stdio.h>
#include<string.h>
int dp[3000000];
int wu[100],wug;
int zong;
int find()
{
int n,i,a,b,c,d,x,y,z;
char name;
scanf("%d",&n);
c=x=y=z=0;
for(i=0;i<n;i++)
{
getchar();
name=getchar();
if(name!='A'&&name!='B'&&name!='C')
{
c=101000;
scanf(":%d.%d",&a,&b);
continue;
}
scanf(":%d.%d",&a,&b);
d=100*a+b;
if(name=='A')
x+=d;
if(name=='B')
y+=d;
if(name=='C')
z+=d;
c+=d;
}
if(x>60000||y>60000||z>60000)
return 0;
if(c>100000)
return 0;
return c;
}
int main()
{
int a,b,c;
while(1)
{
wug=0;
memset(wu,0,sizeof(wu));
memset(dp,0,sizeof(dp));
scanf("%d",&a);
getchar();
scanf("%d%d",&b,&c);
if(c==0)
return 0;
zong=a*100+b;
for(a=0;a<c;a++)
{
wu[wug]=find();
if(wu[wug])
wug++;
}
for(a=0;a<wug;a++)
{
for(b=zong;b>=wu[a];b--)
{
if(dp[b]<(dp[b-wu[a]]+wu[a]))
dp[b]=(dp[b-wu[a]]+wu[a]);
}
}
printf("%.2f\n",dp[zong]*1.0/100);
}
return 0;
}
hdu1864 最大报销额
最新推荐文章于 2022-03-06 23:14:35 发布