抢劫案
抢劫案
问题描述
有抱负的罗伊·罗伯(Roy the Robber)看过很多美国电影,并且知道坏蛋通常最终会被抓到,通常是因为他们变得太贪心了。他决定只在短期内从事赚钱的银行抢劫案工作,然后退休,然后再回到大学从事舒适的工作。
几个月来,罗伊(Roy)一直在评估各种银行的安全性和所持有的现金量。他想冒险,并想尽可能多地赚钱。
他的母亲奥拉(Ola)决定了可以忍受的可能性。她认为,如果他一起抢劫的银行给出的概率小于这个概率,他就足够安全了。
几个月来,罗伊(Roy)一直在评估各种银行的安全性和所持有的现金量。他想冒险,并想尽可能多地赚钱。
他的母亲奥拉(Ola)决定了可以忍受的可能性。她认为,如果他一起抢劫的银行给出的概率小于这个概率,他就足够安全了。
输入项
输入的第一行给出T,即案例数。对于每种情况,输入的第一行给出一个浮点数P(Roy的概率必须低于此值),以及一个整数N(他有计划的银行数目)。然后跟随N行,其中j行给出一个整数Mj和一个浮点数Pj。
银行j包含Mj百万,而抢劫它的概率为Pj。
银行j包含Mj百万,而抢劫它的概率为Pj。
输出量
对于每个测试用例,输出一条行,他可以预期获得的最大数目为百万,而被捕获的可能性小于设置的限制。
注释和约束
0 <T <= 100
0.0 <= P <= 1.0
0 <N <= 100
0 <Mj <= 100
0.0 <= Pj <= 1.0
如果银行被抢劫,它可能会破产,您可以假定所有概率是独立的,因为警察的资金非常少。
注释和约束
0 <T <= 100
0.0 <= P <= 1.0
0 <N <= 100
0 <Mj <= 100
0.0 <= Pj <= 1.0
如果银行被抢劫,它可能会破产,您可以假定所有概率是独立的,因为警察的资金非常少。
代码:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct bag
{
int v;
double p;
}Bag[10010];
double dp[10010];
int main()
{
int T,N;
double p;
cin>>T;
while(T--)
{
cin>>p>>N;
int sum = 0;
for(int i = 0; i < N; i++)
{
cin>>Bag[i].v>>Bag[i].p;
sum += Bag[i].v;
}
dp[0] = 1;
for(int i = 0; i < N; i++)
{
for(int j = sum; j >= Bag[i].v; j--)
{
dp[j] = max(dp[j],dp[j-Bag[i].v]*(1-Bag[i].p));
}
}
for(int i = sum; i >= 0; i--)
{
if(dp[i] > 1-p)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}
因上求缘,果上努力~~~~ 作者:图神经网络,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13726366.html