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
 
给出一个临街概率,求被抓概率不超过此概率的情况下能抢到的最大价值;
由于题目给出的是被抓概率,计算起来没有成功概率方便,我们不妨将失败概率转化为成功概率计算更加容易;
DP[i]:抢到i价值成功的最大概率,不同于背包的一点是,有点“必须装满的感觉”,就是这个i必须要能够被给出的几个价值组合成才可,所以初始化概率为0(dp[0]=1)
{背包:dp[i]:背包大小为i时能获得的最大价值,这道题的话,只要价值无法被组成概率就是0,就是没有固定背包大小,《背包大小成了要求的未知数》!!!
但又多了一重要求:概率要小于给定概率;}
 
综上此题要求的是:在概率满足题目要求的情况下,由给定的几个’物品‘所能组成的最大价值!!!
 
 
代码:

#include<bits/stdc++.h>
using namespace std;
double dp[10005]; //x下标表示能抢够这个金钱的概率
int main()
{
int T,N,m[105],n,i,j,k,max_money;
double P,p[105];
cin>>T;
while(T--){memset(dp,0,sizeof(dp));
dp[0]=1,max_money=0;
cin>>P>>N;
for(i=1;i<=N;++i) {
cin>>m[i]>>p[i];
p[i]=1.0-p[i];
max_money+=m[i];
}
for(i=1;i<=N;++i)
for(j=max_money;j>=m[i];--j)
dp[j]=max(dp[j],dp[j-m[i]]*p[i]);
for(i=max_money;i>=0;--i) if(dp[i]>1-P||i==0) {cout<<i<<endl;break;}
}
return 0;
}

hdu2955(概率DP)的更多相关文章

  1. Codeforces 28C [概率DP]

    /* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...

  2. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  3. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  4. POJ 2151 Check the difficulty of problems (概率DP)

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  5. 概率DP light oj 1030

    t组数据 n块黄金 到这里就捡起来 出发点1 到n结束  点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6  如果满6个的话 否则 ...

  6. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  7. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  8. SGU 422 Fast Typing(概率DP)

    题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...

  9. HDU 4050 wolf5x(动态规划-概率DP)

    wolf5x Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. 概率dp入门

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. poj2096:Collecting Bugs #include <i ...

随机推荐

  1. 主攻ASP.NET MVC4.0之重生:Asp.Net MVC WebApi OData

    1.新建MVC项目,安装OData Install-Package Microsoft.AspNet.WebApi.OData -Version 4.0.0 2.新建WebAPI Controller ...

  2. 安装webpack出现警告: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents):

    警告如下: npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\chokidar\node_mo ...

  3. linux django 知识点 安装mysql数据库 和 pycharm

     django 命令及相关知识点 1. 启动 pycharm 命令:sh pycharm.sh 2. 创建 django 项目 : django-admin.py startproject Hello ...

  4. VS编译器之间相互打开的技巧

    例如:VS2010的工程在VS2012上打开,在工程属性里面 选择“常规” --> "平台工具集中"   选择 正在打开版本的型号.

  5. linux提示usb_serial_generic_write_bulk_callback - urb stoped: -32

    1.环境: 上位机:ubuntu16.04 Linux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_ ...

  6. 对某项目中Vuex用法的分析

    上周五刚发布一个线上版本,趁着新的需求和bug还没到来,决定分析一下正在维护的一个使用Vue 2.0 开发的后台管理系统中Vuex部分代码.这部分代码不是我写的,加上我一直在“使用”现成的而不是“搭建 ...

  7. UVa 1152 和为0的4个值(二分查找)

    https://vjudge.net/problem/UVA-1152 题意:给定4个n元素集合A,B,C,D,要求分别从中选取一个元素a,b,c,d,使得a+b+c+d=0.问有多少种取法. 思路: ...

  8. C# ashx接收ContentType="text/xml"类型值

    public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain&qu ...

  9. 转载: 几个主流的Java连接池整理

    https://www.cnblogs.com/linjian/p/4831088.html 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所 ...

  10. MongoDB(课时22 过期索引)

    3.6.2 过期索引 在一些程序的站点会出现若干秒之后信息被删除的情况,例如:手机信息验证码,那么在MongoDB里面可以轻松实现过期索引.但这个时间往往不怎么准确. 范例:设置过期索引(实现过期索引 ...