hdu 2955 Robberies 01背包变形

来源:互联网 发布:mysql更新字段值 编辑:程序博客网 时间:2024/05/16 06:50
#include <stdio.h>#include <math.h>#include <string.h>#include <stdlib.h>double f[10001];double maxn;double maxs(double a,double b){    return a-b>1e-12?a:b;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        int n,i,j,k,m=0,c[101];        double a[101];        scanf("%lf%d",&maxn,&n);        maxn=1-maxn;        for(i=0;i<n;i++)        {            scanf("%d%lf",&c[i],&a[i]);            a[i]=1-a[i];            m+=c[i];        }        for(i=0;i<=m;i++)            f[i]=0;        f[0]=1;        for(i=0;i<n;i++)        {            for(j=m;j>=c[i];j--)            {                f[j]=maxs(f[j],f[j-c[i]]*a[i]);            }        }        for(i=m;i>=0;i--)        if(f[i]-maxn>1e-12)        break;        printf("%d\n",i);    }    return 0;}

题目中输入的是被抓住的概率,如果背包抓住的概率有点烦,就背包逃跑的概率;抓住的概率是ai,那么逃跑概率就是∏(1-ai)

初始化f[0]=1,其他为0;因为一开始只有没有盗取钱财的情况下逃跑的概率是1

原创粉丝点击