链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=3000010;
int dp[INF];
int val[INF];
int main()
{
double q;
int n;
while(scanf("%lf%d",&q,&n) && n)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
int m;
scanf("%d",&m);
bool flag=true;
char type;
double price;
double A=0,B=0,C=0;
while(m--)
{
scanf(" %c:%lf",&type,&price);
if(type=='A') A+=price;
else if(type=='B') B+=price;
else if(type=='C') C+=price;
else flag=false;
}
if(flag && A<=600 && B<=600 && B<=600 && A+B+C<=1000)
val[++cnt]=(int)((A+B+C)*100);
}
memset(dp,0,sizeof(dp));
int p = (int)(q*100);
for(int i=1; i<=cnt; i++)
for(int j=p; j>=val[i]; j--)
dp[j] = max(dp[j],dp[j-val[i]]+val[i]);
printf("%.2lf\n",dp[p]/100.0);
}
return 0;
}