hdu2955---Robberies(機率做01背包),我的世界背包怎麼做

來源:互聯網
上載者:User

hdu2955---Robberies(機率做01背包),我的世界背包怎麼做

Problem Description
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business of bank robbery only for a short while, before retiring to a comfortable job at a university.

For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.

His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he is safe enough if the banks he robs together give a probability less than this.

Input
The first line of input gives T, the number of cases. For each scenario, the first line of input gives a floating point number P, the probability Roy needs to be below, and an integer N, the number of banks he has plans for. Then follow N lines, where line j gives an integer Mj and a floating point number Pj .
Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj .

Output
For each test case, output a line with the maximum number of millions he can expect to get while the probability of getting caught is less than the limit set.

Notes and Constraints
0 < T <= 100
0.0 <= P <= 1.0
0 < N <= 100
0 < Mj <= 100
0.0 <= Pj <= 1.0
A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.

Sample Input

3 0.04 3 1 0.02 2 0.03 3 0.05 0.06 3 2 0.03 2 0.03 3 0.05 0.10 3 1 0.03 2 0.02 3 0.05

Sample Output

2 4 6

Source
IDI Open 2009

Recommend
gaojie | We have carefully selected several similar problems for you: 2844 1864 1505 2084 2870

01背包,但是機率不能直接相加
設dp[i] 表示搶到i元,逃脫的最大機率
把錢當體積,機率當價值來做01背包

/*************************************************************************    > File Name: hdu2955.cpp    > Author: ALex    > Mail: zchao1995@gmail.com     > Created Time: 2015年02月24日 星期二 14時32分44秒 ************************************************************************/#include <map>#include <set>#include <queue>#include <stack>#include <vector>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const double pi = acos(-1);const int inf = 0x3f3f3f3f;const double eps = 1e-15;typedef long long LL;typedef pair <int, int> PLL;int val[110];double p[110];double dp[11000];int main (){    int t;    scanf("%d", &t);    while (t--)    {        double con;        int n;        scanf("%lf%d", &con, &n);        memset (dp, 0, sizeof(dp));        dp[0] = 1;        int MAX = 0;        for (int i = 1; i <= n; ++i)        {            scanf("%d%lf", &val[i], &p[i]);            MAX += val[i];        }        for (int i = 1; i <= n; ++i)        {            for (int j = MAX; j >= val[i]; --j)            {                dp[j] = max (dp[j], dp[j - val[i]] * (1 - p[i]));            }        }        int ans = 0;        for (int i = MAX; i >= 0; --i)        {            if (dp[i] > 1 - con)            {                ans = i;                break;            }        }        printf("%d\n", ans);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.