https://acm.hdu.edu.cn/showproblem.php?pid=1864
注意题中的条件,不符合条件的直接不考虑
并且,物品的重量价值不是整型,!!!!!!!!!!要整型转换
/***************************
01 背包
1.放每个bone到背包
# 2013-11-20 13:39:35
# Time: MS Memory: K
# Author: zyh
***************************/
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int f[3000010];
double p[35];
int zeroonepack(int n,int v)
{
memset(f,0,sizeof(f));
for(int i=0;i<n;i++){
int t = (int)(p[i]*100); //转换成整数
for(int j=v;j>=t;j--){
if(f[j]<f[j-t]+t)
f[j] = f[j-t]+t;
}
}
return f[v];
}
int main()
{
int j,i,m,n,flag;
double sum,v,q,a,b,c;
char ch;
while(~scanf("%lf %d",&q,&n),n){
for(j=i=0;i<n;i++) {
scanf("%d",&m);
getchar();
a=b=c=0; flag = 1;
while(m--){
scanf("%c:%lf",&ch,&v);
if(ch!='A' && ch!='B' && ch != 'C') flag = 0;
else if(ch=='A') a+=v;
else if(ch=='B') b+=v;
else if(ch=='C') c+=v;
getchar();
}
if(a+b+c<=1000 && a<=600 && b<=600 && c<=600 && flag) p[j++] =a+b+c; //题中条件
}
printf("%.2lf\n",1.0*zeroonepack(j,(int)(q*100))/100);
}
return 0;
}