HDU--2955

来源:互联网 发布:三星软件市场 编辑:程序博客网 时间:2024/05/16 05:20
找到状态转移方程即可。
#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#define max(a,b) a>b?a:busing namespace std;int main(){    int t,i,j,n,m[105];    double v[105],p,dp[105*105];    scanf("%d",&t);    while(t--)    {        scanf("%lf%d",&p,&n);        p=1-p;        int sum=0;        for(i=1;i<=n;i++)        {            scanf("%d%lf",&m[i],&v[i]);            v[i]=1-v[i];            sum+=m[i];        }        for(i=0;i<=sum;i++)            dp[i]=0;        dp[0]=1;        for(j=1;j<=n;j++)        {            for(i=sum;i>=m[j];i--)            {                dp[i]=max(dp[i],dp[i-m[j]]*v[j]);            }        }        for(i=sum;i>=0;i--)        {            if(dp[i]>p)            {                printf("%d\n",i);                break;            }        }    }    return 0;}

原创粉丝点击