hdu 1864 最大报销额(01背包)

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; 
}