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. 安装Jupyter Notebook

    1.安装Ipython pip3 install -i https://pypi.douban.com/simple ipython 2.安装jupyter pip3 install -i https ...

  2. 【Flink】Flink作业调度流程分析

    1. 概述 当向Flink集群提交用户作业时,从用户角度看,只需要作业处理逻辑正确,输出正确的结果即可:而不用关心作业何时被调度的,作业申请的资源又是如何被分配的以及作业何时会结束:但是了解作业在运行 ...

  3. .net Core Autofac稍微高级一点的方法

    前情摘要 前段时间写了autofac的注入但是每次都需要去修改startup这应该不是大家想要的. 至少不是我想要的. 网上有朋友说可以创建一个基础类来时间. 好了吹牛时间结束我们开始干点正事. 创建 ...

  4. Docker安装之路

    从3月初到现在,一直在安装docker 的路上越走越远,大概就在1个小时前,我终于成功了,那一刻,我觉得我拥有了整个世界,于是乎,拥有了整个世界的我决定草率的并粗略的记录一下安装过程中遇到的我能记住的 ...

  5. 用JAVA分别实现WebSocket客户端与服务端

    最近公司在搞一个项目刚好需要用到WebSocket技术来实现实时数据的传输,因为之前也没接触过,所以捣鼓了好些天,最近恰巧有空就写写.有误的地方还请大牛们能及时指正. 项目背景:基于spring+sp ...

  6. 创建dynamics CRM client-side (十四) - Web API

    Xrm.WebApi 是我们做前端开发不可不缺少的内容. Xrm.WebApi 分为online和offline online: 可以实现和服务器的CRUD交互 offline: 多用于mobile ...

  7. WTL Picture Control显示图片

    1.在对话框上新建一个Picture Control ID为:IDC_STATIC_IMG 2.添加图片资源ID:IDB_BITMAP1(选中Bitmap点击导入,选择bmp图片资源) 实现: CWi ...

  8. Asp.Net Core Identity 骚断腿的究极魔改实体类

    前言 默认的 Identity 实体类型在大多数时候已经基本够用,很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段,比如头像.这次,我要向园友隆重介绍我魔改之后的 Ident ...

  9. PySpark Rdd Cheat Sheet Python

  10. socket实现文件上传(客户端向服务器端上传照片示例)

    本示例在对socket有了基本了解之后,可以实现基本的文件上传.首先先介绍一下目录结构,server_data文件夹是用来存放客户端上传的文件,client_data是模拟客户端文件夹(目的是为了测试 ...