hdu 2955 Robberies 01背包问题

来源:互联网 发布:人工智能战机 编辑:程序博客网 时间:2024/05/16 17:16
题目链接
题意:给出总概率P,银行个数n。每个银行有价值vi,被抓概率pi。求被抓概率不大于P所抢到的最大价值。
由于这题的概率是小数。我们把概率看成价值,价值看成容量。di表示的是抢到价值时最大不被抓率。
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#define INF 1e11#define N 11000using namespace std;int w[N];double v[N],d[N];int main(){    int T,n;    double p;    cin>>T;    while(T--)    {        scanf("%lf%d",&p,&n);        int m=0,ans=0;        for(int i=0;i<n;i++)        {            scanf("%d%lf",&w[i],&v[i]);            m+=w[i];        }        memset(d,0,sizeof(d));        d[0]=1;        for(int i=0;i<n;i++)            for(int j=m;j>=w[i];j--)                d[j]=max(d[j],d[j-w[i]]*(1-v[i]));        for(int i=m;i>=0;i--)            if(d[i]>=1-p)            {                cout<<i<<endl;                break;            }    }}

0 0
原创粉丝点击