题目:

As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated risk, and grab as much money as possible. But his friends - Hermione and Ron have decided upon a tolerable probability P of getting caught. They feel that he is safe enough if the banks he robs together give a probability less than P.

Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case contains a real number P, the probability Harry needs to be below, and an integer N (0 < N ≤ 100), the number of banks he has plans for. Then follow N lines, where line j gives an integer Mj (0 < Mj ≤ 100) and a real number Pj . Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj. A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.

Output

For each case, print the case number and the maximum number of millions he can expect to get while the probability of getting caught is less than P.

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

Case 1: 2

Case 2: 4

Case 3: 6

Note

For the first case, if he wants to rob bank 1 and 2, then the probability of getting caught is 0.02 + (1 - 0.02) * .03 = 0.0494 which is greater than the given probability (0.04). That's why he has only option, just to rob rank 2.

题目大意:

n 个银行,抢第 i 个银行,有 pi 被抓的风险,将抢到 mi 的钱数,现给定一个最大风险P,求在该风险范围内求能抢到的最大钱数。

z解题思路:

有三个变量,抢的银行数目,抢到的钱数,被抓到的概率,于是采用二维数组表示:dp[ i ][ j ]表示 在前 i 家银行抢劫 j 元的最小概率。

则将初始值设为 1 , 以便求出最小概率【概率最大值为1,最小值为0】;

状态转移方程: dp[ i ][ j ]=min(dp[ i-1 ][ j ],dp[ i-1 ][ j-m[ i ] ]+( 1 - dp[ i-1 ][ j-m[ i ] ] )*p[ i ] )

实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;int n,m[105];
double k,p[110],dp[110][10010];
int main(){int T,t;scanf("%d",&T);for(t=1;t<=T;t++){scanf("%lf %d",&k,&n);  //最大被抓概率int sum=0;for(int i=1;i<=n;i++){scanf("%d %lf",&m[i],&p[i]);sum+=m[i];}for(int j=1;j<=sum;j++) //求最小概率,初值设为dp[0][j]=1;for(int i=1;i<=n;i++){for(int j=1;j<=sum;j++){if(j>=m[i])     //抢到的钱随着抢劫银行的数量增加或者不变dp[i][j]=min(dp[i-1][j],dp[i-1][j-m[i]]+(double)(1-dp[i-1][j-m[i]])*p[i]);//当j > m[i]的时候存在两种可能:抢劫该银行,不抢劫该银行。这时选择最小值。else            //不抢,延续上一家的概率dp[i][j]=dp[i-1][j];}}int ans=0;for(int j=1;j<=sum;j++){if(dp[n][j]<k)      //找 靠后的,满足概率需求的 最大钱数ans=j;}printf("Case %d: %d\n",t,ans);}return 0;
}

LightOJ 1079 Just another Robbery【概率DP】相关推荐

  1. LightOJ 1079 Just another Robbery (概率dp+背包)

    题意:有n家银行,每家银行都有一定数量的钱和被抓概率,给出自己被抓概率的上限,求能获得最多的钱. 题解:概率dp+背包 用dp[]dp[]dp[]表示获得这么多钱被抓的概率.获得同等钱的概率要尽可能小 ...

  2. LightOJ - 1079 Just another Robbery —— 概率、背包

    题目链接:https://vjudge.net/problem/LightOJ-1079 1079 - Just another Robbery     PDF (English) Statistic ...

  3. Just another Robbery LightOJ - 1079[背包形状的概率dp]

    题目大意:就是你有nnn个目标银行,某个银行iii你会抢到mim_imi​元但是同时你有pip_ipi​的概率会被警察抓住,现在题目给你一个ppp问你在被抓的概率不超过ppp的情况下最大的抢到钱数是多 ...

  4. LightOJ 1079 Just another Robbery

    题目:LightOJ 1079 Just another Robbery 这个题挺有意思的,虽然也算得上是水吧-- 01背包是模板,但是这是一个涉及概率的问题,概率这个部分要学习一下. 下面的代码求的 ...

  5. LightOJ 1364 Expected Cards(概率+DP)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1364 题意:一副牌.依次在桌面上放牌.求放了四种花色的牌为C,D,H,S张时放的牌数的 ...

  6. LightOJ 1079 Just another Robbery

    http://lightoj.com/volume_showproblem.php?problem=1079 这道题搞了挺久的...菜哭,本来想直接贪心用性价比最高的,结果过不了样例... 重新看了下 ...

  7. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  8. LightOJ 1395 A Dangerous Maze (II) (概率dp)

    题意:给出n扇门,每扇门都给出一个数x,若为正数,则表示在x时间后走出迷宫,若为负数,则表示在x时间后回到起点,你会记得最后k扇你走过的门(不会再走),求最后的期望时间. 题解:概率dp 这题的进阶版 ...

  9. 01背包+概率dp Just another Robbery 抢银行

    题意:有n各个银行,每个银行有v[ i ]的钱并且有x [ i ] 的被抓住啊概率,如果被抓概率<=p,那么他是安全的,求他期望的最大钱数. 输入 3    //3组 0.04 3 1 0.02 ...

最新文章

  1. python列表的小东西_Python---列表相关操作
  2. CSS3 filter:drop-shadow滤镜与box-shadow区别
  3. 无障碍开发(七)之实例讲解
  4. VMware虚拟机安装
  5. 【git系列】git命令之撤销回退篇
  6. 十年一诺,亚马逊中国今欲先发制人
  7. POJ 1080 Human Gene Functions(DP:LCS)
  8. 线程--线程池--委托--task---async/await
  9. 【excel】插入其他文件做工作表
  10. 前期总结+开学展望(WYL)
  11. mysql error 1677_MySQL slave error 1677
  12. 使用DOS命令操作MySQL
  13. DevOps读书清单:十本应该放入书架的经典
  14. 力扣(1053.115)补9.13
  15. EPICS记录参考4--所有输入记录都有的字段和所有输出记录都有的字段
  16. Android怎样判断APP是64位运行,还是32位运行?
  17. VisualBoy Advance编译心得
  18. 预言机或成补齐DApp爆发的最后一片拼图? |链捕手
  19. 突发!Intel 官宣换帅,股价大涨
  20. Seasar サイトマップ

热门文章

  1. 【其他】免费的在线阅读电子书
  2. 知乎、百度会被ChatGPT取代吗?百度文心一言胜算如何
  3. HTML+CSS实现商品介绍模考(以Apple14为案例)
  4. Codeforces--839A--Arya and Bran
  5. MacBook Air M1 Centos7 安装linux系统安装
  6. mac退出linux命令行,mac/Linux日常入门命令行使用
  7. 智能控制——模糊数学及控制
  8. Android布局之AbsoluteLayout和FrameLayout
  9. 天津大学计算机网络专业排名,2019计算机考研天津大学先进网络技术与应用重点实验室简介...
  10. txs0108e原理分析