[Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

题面

一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每通过一关后可以选择继续下一关或者时间清0并从第一关开始,先要求通过所有关卡的时间和不能超过R才算彻底通关,问直到彻底通关位置的游戏时间的期望值为多少

分析

二分从头开始通关的用时期望mid

设\(dp[i][j]\)表示通前i关,当前时间为j的期望,倒推期望.

若超时重新开始,则\(dp[i][j]=mid\)

若用方法a通过这一关,则更新j,\((dp[i+1][j+a[i]]+a[i])*p[i]\)

用方法b同理

总而言之,有$$dp[i][j]=min(mid,(dp[i+1][j+a[i]]+a[i])p[i],(dp[i+1][j+b[i]]+b[i])(1-p[i]))$$

如果最终答案\(dp[1][0]<mid\),就缩小二分范围,否则增大二分范围

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 50
#define maxv 5000
#define maxrb 1e10
#define maxt 150 //二分答案迭代次数,处理精度
using namespace std;
int n,r;
int a[maxn+5],b[maxn+5];
double p[maxn+5];
double dp[maxn+5][maxv+5];
//dp[i][j]第i关,用时j通关的期望
//二分从1关开始通完的期望mid
bool check(double mid){
for(int i=n;i>=1;i--){
for(int j=r+1;j<=maxv;j++){
dp[i+1][j]=mid;
//通关超过时间限制,回到起点重新开始
}
for(int j=0;j<=r;j++){
double t1=(dp[i+1][j+a[i]]+a[i])*p[i];
double t2=(dp[i+1][j+b[i]]+b[i])*(1-p[i]);
dp[i][j]=min(mid,t1+t2);
}
}
if(dp[1][0]<mid) return 1;//如果实际dp值比二分值更小,可以继续缩小二分范围
else return 0;
}
int main(){
scanf("%d %d",&n,&r);
for(int i=1;i<=n;i++){
scanf("%d %d",&a[i],&b[i]);
scanf("%lf",&p[i]);
p[i]/=100;
}
double lb=0,rb=1e10,mid,ans=0;
for(int i=1;i<=maxt;i++){
mid=(lb+rb)/2;
if(check(mid)){
ans=mid;
rb=mid;
}else lb=mid;
}
printf("%.9lf",ans);
}

[Codeforces 865C]Gotta Go Fast(期望dp+二分答案)的更多相关文章

  1. Codeforces 865C Gotta Go Fast 二分 + 期望dp (看题解)

    第一次看到这种骚东西, 期望还能二分的啊??? 因为存在重置的操作, 所以我们再dp的过程中有环存在. 为了消除环的影响, 我们二分dp[ 0 ][ 0 ]的值, 与通过dp得出的dp[ 0 ][ 0 ...

  2. [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)

    [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ...

  3. codeforces gym 100947 J. Killing everything dp+二分

    J. Killing everything time limit per test 4 seconds memory limit per test 64 megabytes input standar ...

  4. BZOJ3420[POI2013]Triumphal arch&BZOJ5174[Jsoi2013]哈利波特与死亡圣器——树形DP+二分答案

    题目大意: 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜.求能让A获胜的最 ...

  5. CodeChef FAVNUM FavouriteNumbers(AC自动机+数位dp+二分答案)

    All submissions for this problem are available. Chef likes numbers and number theory, we all know th ...

  6. [luogu]P1800 software_NOI导刊2010提高(06)[DP][二分答案]

    [luogu]P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块, ...

  7. HAOI2008 木棍分割 数据结构优化dp+二分答案

    很久之前打的题,现在补篇博客 打滚动数组 #E. 木棍分割 Accepted 100 1712 ms 1512 KiB   2019-05-07 17:01:23 Short 不打滚动数组 #419. ...

  8. Codeforces Round #377 (Div. 2) D. Exams(二分答案)

    D. Exams Problem Description: Vasiliy has an exam period which will continue for n days. He has to p ...

  9. CodeForces 371C Hamburgers(经典)【二分答案】

    <题目链接> 题目大意: 给以一段字符串,其中只包含"BSC"这三个字符,现在有一定量免费的'B','S','C‘,然后如果想再买这三个字符,就要付出相应的价格.现在总 ...

随机推荐

  1. 2018团队项目beta阶段成果汇总

    2018团队项目beta阶段成果汇总   第一组:二手书 团队博客:http://www.cnblogs.com/DeltaFish/ 博客汇总:https://www.cnblogs.com/Del ...

  2. php WebService应用

    <?php header ( "Content-Type: text/html; charset=gb2312" ); /* * 指定WebService路径并初始化一个We ...

  3. Sql Server中的标识列(自增长字段)

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由 ...

  4. SICP 习题解 第二章

    计算机程序的构造和解释习题解答 Structure and Interpretation os Computer Programs Exercises Answer 第二章 构造数据抽象 练习2.17 ...

  5. 【串线篇】spring boot全面接管springMvc

    一.Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:(WebMvcAutoC ...

  6. Windows10下安装Jupyter

    打开cmd 升级pip3的版本: pip3 install --upgrade pip 安装Jupyter pip3 install jupyter

  7. linux-Centos 7下bond与vlan技术的结合[推荐]

    https://blog.51cto.com/sf1314/2073519 服务器eth0与eth1作bonding,捆绑成bond0接口,服务器对端交换机端口,同属于100.101号vlan接口 v ...

  8. 01 安装IDEA

    https://www.jetbrains.com 1 . 2

  9. CF286E Ladies' Shop FFT

    题目链接 读完题后,我们发现如下性质: 在合法且和不超过 $m$ 的情况下,如果 $a_{i}$ 出现,则 $a_{i}$ 的倍数也必出现. 所以如果合法,只要对所有数两两结合一次就能得到所有 $a_ ...

  10. 本页面用来演示如何通过JS SDK,创建完整的QQ登录流程,并调用openapi接口

    QQ登录将用户信息存储在cookie中,命名为__qc__k ,请不要占用 __qc__k : 1) :: 在页面顶部引入JS SDK库: 将“js?”后面的appid参数(示例代码中的:100229 ...