《动态规划》hdoj 2955 背包问题 求概率

概率要相乘  dp[i]记录获得i million 时不被抓的概率 1-pj为所要求的不被抓的概率 dp[i]大于1-pj时 即为所求

#include<stdio.h>

int main()
{
    int t,v[105],i,sum,j,n;
    float p[105],dp[10005],pj;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%f%d",&pj,&n);
        sum=0;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
        {
            scanf("%d%f",&v[i],&p[i]);
            sum+=v[i];
        }
        dp[0]=1;
        for(i=1;i<=n;i++)
        {
            for(j=sum;j>=v[i];j--)
            {
                if(dp[j-v[i]]*(1-p[i])>dp[j])
                    dp[j]=dp[j-v[i]]*(1-p[i]);
            }
        }
        for(i=sum;i>=0;i--)
        {
            if(dp[i]>1-pj)
            {
                printf("%d\n",i);
                break;
            }
        }
    }
    return 0;

}

你可能感兴趣的:(《动态规划》hdoj 2955 背包问题 求概率)