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