LightOJ 1079 - Just another Robbery 【背包问题】

来源:互联网 发布:北极熊团 知乎 编辑:程序博客网 时间:2024/06/06 05:43

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1079

题意:
给你一些银行的存储金钱的数目及被抓的概率,若被抓总概率不超过p的话,问不被抓的条件下最多可以抢多少钱?

思路:
对于一个银行,可以抢或者不抢,于是想到了背包。

代码:

#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <string.h>#include <string>using namespace std;double p;int n;int a[110];double b[110];double dp[11000];int main(){    int T;    scanf("%d", &T);    for (int t = 1;t <= T;t++)    {        memset(dp, 0, sizeof(dp));        scanf("%lf%d", &p, &n);        int sum = 0;        for (int i = 1;i <= n;i++)        {            scanf("%d%lf", &a[i], &b[i]);            sum += a[i];        }        dp[0] = 1;        for (int i = 1;i <= n;i++)        {            for (int j = sum;j >= a[i];j--)            {                dp[j] = max(dp[j], dp[j - a[i]] * (1 - b[i]));                          }        }        int ans = 0;        for (int i = 0;i <= sum;i++)        {            if (1 - dp[i] < p)            ans = max(i, ans);        }        printf("Case %d: %d\n", t, ans);    }    return 0;}
0 0
原创粉丝点击