标签:
200.00 3 2 A:23.50 B:100.00 1 C:650.00 3 A:59.99 A:120.00 X:10.00 1200.00 2 2 B:600.00 A:400.00 1 C:200.50 1200.50 3 2 B:600.00 A:400.00 1 C:200.50 1 A:100.00 100.00 0
123.50 1000.00 1200.50
解析:01背包。
AC代码:
#include<stdio.h> #include<algorithm> #include<string.h> int main() { int n,flag,j,l,m; char ch; float Q,q,Max,dp[31],v[31],A,B,C; #ifdef sunxiukun freopen("in.txt","r",stdin); #endif // sunxiukun while(scanf("%f%d",&Q,&n)!=EOF && n) { memset(dp,0,sizeof(dp)); l=1; for(int i=0;i<n;i++) { scanf("%d",&m); A=B=C=0; flag=1; for(j=0;j<m;j++) { scanf(" %c:%f",&ch,&q); if(ch=='A') A+=q; if(ch=='B') B+=q; if(ch=='C') C+=q; if(ch<'A' || ch>'C') flag=0; } if(A+B+C<=1000 && A<=600 &&B<=600 && C<=600 && flag) v[l++]=A+B+C; } for(int i=1;i<l;i++) { for(j=i-1;j>=0;j--) if(dp[j]+v[i]<=Q) if(dp[i]<dp[j]+v[i]) dp[i]=dp[j]+v[i]; } Max=0; for(int i=1;i<l;i++) if(dp[i]>Max) Max=dp[i]; printf("%.2f\n",Max); } return 0; }
标签:
原文地址:http://blog.csdn.net/u013446688/article/details/45459329