hdu 2955 01背包

来源:互联网 发布:淘宝一件代发下单流程 编辑:程序博客网 时间:2024/05/14 20:30
按照01 背包知道 概率应该作为背包 但是浮点型不能直接减, 所以转换下将钱的总和作为背包 被抓的概率转换为不被抓的概率 作为价值;#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;double dp[10050], c[110];int v[110];int main(){    int t, sum;    scanf("%d", &t);    while(t--)    {        double q;        int n;        sum = 0;        scanf("%lf%d", &q, &n);        for(int i = 0; i < n; i++)        {            scanf("%d%lf", &v[i], &c[i]);            sum += v[i];        }        memset(dp, 0, sizeof(dp));        dp[0] = 1.0;        for(int i = 0; i < n; i++)            for(int j = sum; j >= v[i]; j--)                dp[j] = max(dp[j], dp[j-v[i]]*(1-c[i]));//抢劫j元不被抓的最大概率,        for(int j = sum; j >= 0; j--)            if(dp[j] >= 1-q)//p是被抓的概率,1-p是不被抓的概率。            {                printf("%d\n", j);                break;            }    }    return 0;}

原创粉丝点击