题意理解错了,以为是单个物品不能超过600了
#include <stdio.h>
#include <string.h>
#define N 31
bool f[30*1000*100+1];
int main()
{
int flag, n, m, i, j, q, price, sum, pa, pb, pc;
char type;
float temp;
while(scanf("%f%d", &temp, &n), n){
q = (int)(temp * 100);
memset(f, false, sizeof(f));
f[0] = true;
while(n--){
sum = flag = pa = pb = pc = 0;
scanf("%d", &m);
while(m--){
scanf(" %c:%f", &type, &temp);
price = (int)(temp*100);
if( !flag){
switch(type){
case 'A': pa += price; break;
case 'B': pb += price; break;
case 'C': pc += price; break;
default: flag = 1; break;
}
sum += price;
}
}
if( !flag && sum <= 1000*100 && pa <= 600*100 && pb <= 600*100 && pc <= 600*100)
for(i=q; i>=sum; i--)
if(f[i-sum])
f[i] = true;
}
for(i=q; i>=0; i--)
if(f[i])
break;
printf("%.2f\n", i*1.0/100);
}
return 0;
}
vim中 "+yG 挺好用的~