Passage

时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交: 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

题目来源

“光庭杯”第五届华中北区程序设计邀请赛 暨 WHU第八届程序设计竞赛

如果有两总选择 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 (不错)的更多相关文章

  1. 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错

    在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...

  2. Coursera上一个不错的Java课

    地址:https://www.coursera.org/learn/java-chengxu-sheji/home/welcome 复习天昏地暗,看点视频调剂一下.发现这个讲的还是很不错的.北大毕竟比 ...

  3. 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)

    涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...

  4. 一个不错的vue表单验证插件

    github文档 用着不错,官方的文档例子很简单 <body> <div id="app"> <validator name="valida ...

  5. 推荐一个不错的css3网站 可以直接调用的

    animate.css 一搜就能出来  我用着还不错

  6. 关于移动app开发的一些不错的站点

    1. http://www.androiddevtools.cn      Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的A ...

  7. TOJ 2776 CD Making

    TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性...  贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...

  8. 推荐一些不错的计算机书籍(php c mysql linux等等)

    推荐一些不错的计算机书籍. # PHP<PHP程序设计>(第2版)  --PHP语法和入门最好的书<PHP5权威编程>  --PHP入门后升级书<深入PHP:面向对象.模 ...

  9. DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章

    作者:张浩斌 链接:https://www.zhihu.com/question/45552115/answer/99388265 来源:知乎 著作权归作者张浩斌和知乎所有.   ---------- ...

随机推荐

  1. Oracle GoldenGate to Confluent with Kafka Connect

    Confluent is a company founded by the team that built Apache Kafka. It builds a platform around Kafk ...

  2. cnblogs 美化主题

    Silence主题 一个简洁的主题, 不带广告,我很喜欢 cnblogs 域名解析 这需要注意一点是:github.io项目名需要和用户名一致才能正确访问,否则会报404 Markdown格式化编辑 ...

  3. 微软CEO:我们员工以及他们家人的健康与安全是我们最高的优先级!

    在肺炎疫情开始之初,微软中国各个部门就立即采取了各种的防控和关怀措施. 在昨天,微软 CEO Satya Nadella 给微软中国全体员工写了一封邮件. 其中,最让我们感动的就是这句话:" ...

  4. 对于传统scnece-classfication的分析

    BoW模型最初应用于文本处理领域,用来对文档进行分类和识别.BoW 模型因为其简单有效的优点而得到了广泛的应用.其基本原理可以用以下例子来给予描述.给定两句简单的文档: 文档 1:“我喜欢跳舞,小明也 ...

  5. 获取PHP类的所有属性和所有方法,可通过反射机制

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php   class Class1{     public $var1 = 'v ...

  6. 看片微信号+薇myy9199买片微信号+myy9199绝对靠谱号

    最新看片卖片微信号+myy9199,2020最新有效靠谱号,诚信有效,死链包换,2019年11月,我决定学习计算机编程,以java语言为主.我就读于传统工科专业,没怎么接触过计算机相关概念与课程,我知 ...

  7. An internal error occurred during: "Launching New_configuration". Path for project must have only on

    在Eclipse中按照如下操作 Project -> Properties -> Run/Debug Settings: 1. select "Launching New_con ...

  8. [实用分享]Kindle电子书格式AZW3转换为MOBI

    [实用分享]Kindle电子书格式AZW3转换为MOBI 思路:先拆解成源文件再转换成 MOBI 推荐首选这种方法.此方法的思路是,首先用 KindleUnpack 把 azw3 文件拆解成源文件,然 ...

  9. [python之路]学习路线

    python基础 #为什么要学python?python在知名公司广泛应用,谷歌.cia.nasa.youtobe.dropbox.instagram.facebook.redhat.豆瓣.知乎.搜狐 ...

  10. 利用Python进行TCP、UDP套接字编程

    参考:http://www.cnblogs.com/whatbeg/p/5155524.html http://www.cnblogs.com/nzyjlr/p/4236287.html