hdu2955

来源:互联网 发布:淘宝哪家美国代购靠谱 编辑:程序博客网 时间:2024/06/07 17:46
/*
分析:
    01背包小变异。
dp[i][l]=min(dp[i-1][l],dp[i-1][l-E[i].m]+E[i].p*(1-dp[i-1][l-E[i].m]))。


                                                           2012-05-10
*/








#include"stdio.h"#include"string.h"double min(double a,double b){return a>b?b:a;}int main(){    int T;    int n;    double P;    struct A    {        int m;        double p;    }E[111];    int i,l,sum;    double dp[10011];    int flag[10011];        scanf("%d",&T);    while(T--)    {        scanf("%lf%d",&P,&n);        sum=0;        for(i=1;i<=n;i++)        {            scanf("%d%lf",&E[i].m,&E[i].p);            sum+=E[i].m;        }        for(l=1;l<=sum;l++)flag[l]=-1;        flag[0]=1;for(l=1;l<=sum;l++)dp[l]=1;dp[0]=0;         for(i=1;i<=n;i++)        {            for(l=sum;l-E[i].m>=0;l--)            {if(flag[l-E[i].m]!=1)continue;                dp[l]=min(dp[l],dp[l-E[i].m]+E[i].p*(1-dp[l-E[i].m]));                flag[l]=1;            }        }        for(l=sum;l>=0;l--)        {            if(dp[l]<=P&&flag[l]==1)            {                printf("%d\n",l);                break;            }        }    }    return 0;}


原创粉丝点击