hdu1864(简单的01背包)

来源:互联网 发布:python popen pipe 编辑:程序博客网 时间:2024/05/22 05:20

背包的容量不能是小数,但是将其*100就可以了


#include <stdio.h>#include <malloc.h>typedef struct Node{    double sum;}node;node q[35]; //发票 double qq;int n;double max(double a,double b){    if(a>b) return a;    return b;}int main(){    while(scanf("%lf %d",&qq,&n)&&n){        //初始化         int i;        for(i=0;i<=n;i++){            q[i].sum=0;        }        int x=100*qq+2;        double *dp=(double *)malloc(sizeof(double)*x);        for(i=0;i<=qq*100;i++)        dp[i]=0;        int j,k;        for(i=k=1;i<=n;i++){            int m;            scanf("%d",&m);            int f=1;            double a=0,b=0,c=0;            for(j=1;j<=m;j++){                getchar();//空格                char cc;                cc=getchar();                getchar();//:                double num;                 scanf("%lf",&num);                 if(cc == 'A'){                 a+=num;                 }                    else if(cc == 'B'){                    b+=num;                 }                 else if(cc == 'C'){                    c+=num;                 }                 else{ //不是abc                     f=0;                 }            }            if(!f||a>600||b>600||c>600||a+b+c>1000){                q[k].sum=0;            }            else {                q[k].sum=a+b+c;                 k++;            }        }        n=k-1;        for(i=1;i<=n;i++){            for(j=int(100*qq);j>=(int)(100*q[i].sum);j--){                dp[j]=max(dp[j],dp[j-(int)(100*q[i].sum)]+q[i].sum);            }        }        printf("%.2lf\n",dp[(int)(100*qq)]);        }}
原创粉丝点击