toj 3086 Passage (不错)
Passage
总提交: 40 测试通过: 20
描述
Bill is a millionaire. But
unfortunately he was trapped in a castle. There are only n passages to go out.
For any passage i (1<=i<=n), Pi (0<=Pi<=1) denotes the probability
that Bill will escape from this castle safely if he chose this passage. Qi
(0<=Qi<=1-Pi) denotes the probability that there is a group of guards in
this passage. And Bill should give them one million dollars and go back.
Otherwise, he will be killed. The probability of this passage had a dead end is
1-Pi-Qi. In this case Bill has to go back. Whenever he came back, he can choose
another passage.
We already know that Bill has M million dollars. Help Bill
to find out the probability that he can escape from this castle if he chose the
optimal strategy.
输入
The first line contains an
integer T (T<=100) indicating the number of test cases.
The first line of
each test case contains two integers n (1<=n<=1000) and M
(0<=M<=10).
Then n lines follows, each line contains two float number
Pi and Qi.
输出
For each test case, print the
case number and the answer in a single line.
The answer should be rounded to
five digits after the decimal point.
Follow the format of the sample
output.
样例输入
3
1 10
0.5 0
2 0
0.3 0.4
0.4 0.5
3 0
0.333 0.234
0.353 0.453
0.342 0.532
样例输出
Case 1: 0.50000
Case 2: 0.43000
Case 3: 0.51458
题目来源
如果有两总选择 P1, Q1 and P2, Q2
先选第一条路被抓的概率为 ret1 = (1 - p1 - Q1) * Q2 + Q1
先选第二条路被抓的概率为 ret2 = (1 - p2 - Q2) * Q1 + Q2
设P1 / Q1 > P2 / Q2 => P1 * Q2 > P2 * Q1
ret1 - ret2 = P2 * Q1 - P1 * Q2 < 0
所以优先选择第一条路
先按Pi / Qi 从大到小排序
dp[i][j] 表示到第 i 条路, 消耗 j million dollars的概率
逃跑的概率 ret += dp[i-1][j] * Pi ( j <= k )
dp[i][j] = dp[i-1][j] * (1.0 - Pi - Qi) + dp[i-1][j-1] * Qi
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std; struct Node{
double Pi, Qi;
}; bool cmp(Node a, Node b){
return a.Pi / a.Qi > b.Pi / b.Qi;
} Node path[];
double dp[][];
double deal(int n, int k){
memset(dp, , sizeof(dp));
dp[][] = ;
double ret = ;
for(int i = ; i <= n; i++){ for(int j = k; j >= ; j--){
ret += dp[i-][j] * path[i].Pi;
dp[i][j] += dp[i-][j] * (1.0 - path[i].Pi - path[i].Qi);
dp[i][j] += dp[i-][j-] * path[i].Qi;
}
ret += dp[i-][] * path[i].Pi;
dp[i][] = dp[i-][] * (1.0 - path[i].Pi - path[i].Qi);
}
return ret;
} int main()
{
int T;
scanf("%d", &T);
for(int cas = ; cas <= T; cas++){
int n, k;
scanf("%d %d", &n, &k);
for(int i = ; i <= n; i++){
scanf("%lf %lf", &path[i].Pi, &path[i].Qi);
}
sort(path+, path+n+, cmp);
printf("Case %d: %.5lf\n", cas, deal(n, k));
}
return ;
}
toj 3086 Passage (不错)的更多相关文章
- 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错
在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...
- Coursera上一个不错的Java课
地址:https://www.coursera.org/learn/java-chengxu-sheji/home/welcome 复习天昏地暗,看点视频调剂一下.发现这个讲的还是很不错的.北大毕竟比 ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- 一个不错的vue表单验证插件
github文档 用着不错,官方的文档例子很简单 <body> <div id="app"> <validator name="valida ...
- 推荐一个不错的css3网站 可以直接调用的
animate.css 一搜就能出来 我用着还不错
- 关于移动app开发的一些不错的站点
1. http://www.androiddevtools.cn Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的A ...
- TOJ 2776 CD Making
TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性... 贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...
- 推荐一些不错的计算机书籍(php c mysql linux等等)
推荐一些不错的计算机书籍. # PHP<PHP程序设计>(第2版) --PHP语法和入门最好的书<PHP5权威编程> --PHP入门后升级书<深入PHP:面向对象.模 ...
- DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章
作者:张浩斌 链接:https://www.zhihu.com/question/45552115/answer/99388265 来源:知乎 著作权归作者张浩斌和知乎所有. ---------- ...
随机推荐
- Kafka Topic 体系结构 - 复制 故障转移 并行处理
本文介绍了 Kafka Topic 的体系结构,并讨论了如何使用分区进行故障转移和并行处理. 1. Kafka Topic, Log, Partition Kafka Topic(主题) 是一个有名字 ...
- golang 服务大量 CLOSE_WAIT 故障排查
事故经过 排查 总结 事故经过 [2019-12-27 18:00 周五] 业务方突然找来说调用我们程序大量提示"触发限流",但是我们没有收到任何监控报警.紧急查看了下 Servi ...
- 插入数据值 设置标签属性的值 来自 精通ASP-NET-MVC-5-弗瑞曼
- Ubuntu下makefile的简单使用
在Windows下,只需要简单的点击以下make,rebuild即可.而在Linux下,这样的IDE环境并没有提供,难道必须每一步都执行一遍吗?比较ok的做法自然是能够利用批处理脚本来进行操作了,这样 ...
- Dynamics CRM Package Deployer 部署工具
CRM 部署工具非常有用 我们可以用部署工具来做迁移,部署 等等. Package Deployer可以同时部署多个solutions. 并且也可以勾选solution的plugin也同时部署. 三 ...
- 优雅写Java之二(数组集合流)
一.数组 二.集合 三.流 学习整理中,本文待补充--
- STM8L15X 硬件I2C调试总结
最近接到一个项目需要使用STM8L上硬件I2C与SN3731通信,用户方是个方案商,硬件设计人员也没留测试点,直接就把板子焊了拿来了.调试时除了swio口能用所有都不能用,硬件设计大概是为了显得自己焊 ...
- SpringBoot2.x整合JDBC及初始化data.sql和schema.sql脚本
今天在使用SpringBoot2.x版本整合JDBC时遇到了一些问题:由于我之前一直用SpringBoot1.5的版本,所以直接在yml里按照1.5的版本配置了属性,没想到2.x直接不能用了.首先是数 ...
- java容器(一) Collection类框架图解
- Spring JSTL 获取后端数据失败。
显示的jsp页面仍是${XXX}的形式. 解决方法一: 这是因为我们在web.xml中使用的是jsp1.2版本的DTD,在此版本JSTL默认不打开,我们需要手动打开,打开方法: 在相应的JSP头部加入 ...