865C
二分+期望dp
好神奇啊。。。出题人太神了!
我们发现dp之间的关系不满足是一个dag,那么我们只能用高斯消元,但是由于这里是取最小值,需要取min,也不能用高斯消元,于是我们想出了一个奇妙的方法
我们假设x为从0到n的期望花费,这是我们自己定的,如果我们选择回到起点,那么就强制用x的期望时间直接到终点。这样dp之间的关系就满足是一个dag了,而且x越大dp值越大,那么我们就可以二分x,然后通过dp检验是否满足条件。
长见识了。。。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n, R;
int a[N], b[N];
double dp[N][], p[N];
double dfs(int x, int y, double mid)
{
if(y > R) return mid;
if(x == n + ) return 0.0;
if(dp[x][y] >= 0.0) return dp[x][y];
dp[x][y] = (dfs(x + , y + a[x], mid) + a[x]) * p[x] + (dfs(x + , y + b[x], mid) + b[x]) * (1.0 - p[x]);
dp[x][y] = min(dp[x][y], mid);
return dp[x][y];
}
bool check(double mid)
{
for(int i = ; i <= n; ++i)
for(int j = ; j <= R; ++j) dp[i][j] = -1.0;
return dfs(, , mid) < mid;
}
int main()
{
scanf("%d%d", &n, &R);
for(int i = ; i <= n; ++i) scanf("%d%d%lf", &a[i], &b[i], &p[i]), p[i] /= 100.0;
double l = 0.0, r = 1e10 + 1.0, ans = 0.0;
for(int i = ; i < ; ++i)
{
double mid = (l + r) / 2.0;
if(check(mid)) r = ans = mid;
else l = mid;
}
printf("%.10f\n", ans);
return ;
}
865C的更多相关文章
- [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)
[Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...
- Codeforces 865C Gotta Go Fast 二分 + 期望dp (看题解)
第一次看到这种骚东西, 期望还能二分的啊??? 因为存在重置的操作, 所以我们再dp的过程中有环存在. 为了消除环的影响, 我们二分dp[ 0 ][ 0 ]的值, 与通过dp得出的dp[ 0 ][ 0 ...
- sphinx 注意点
强制更新索引indexer --all --rotate合并索引indexer --merge index1 index2 --rotate No fields in schema - will no ...
- [JAVA] 基于TCP的起重机运行模拟器
1.客户端 package ClientMain; import java.io.DataInputStream; import java.io.DataOutputStream; import ja ...
- 在WPF中自定义你的绘制(四)
原文:在WPF中自定义你的绘制(四) 在WPF中自定义你的绘制(四) ...
- Linux内核使用浮点运算问题
上一篇博文中 电池温度检测原理和示例代码 ,由于驱动要使用对数函数而从网上参看一个实现 double ln(double a) { ; int k,nk; double x,xx,y; x = (a- ...
- 欧姆龙PLC_CP1H_CRC校验
1.简介 欧姆龙CP1H PLC的CRC校验.CP1H没有CRC校验指令或者功能块,在串口自由协议通信中,如果涉及到CRC校验,需要手动计算CRC值,本程序是一个输入数据,自动计算CRC校验码的程序. ...
- codeforces865C
Gotta Go Fast CodeForces - 865C You're trying to set the record on your favorite video game. The gam ...
随机推荐
- flask如何处理并发
1.使用自身服务器的多进程或者多线程,参考werkzeug的run_simple函数的入参.注意,进程和线程不能同时开启 2.使用gunicorn使用多进程,-w worker 进程数,类型于运行多个 ...
- 【Todo】ES6学习
今天部分分享,有一篇PPT,放在这里了 /Users/baidu/Documents/Data/Work/分享资料/ES6大法好.pptx 内容挺丰富的,可以学习.
- [Javascript] Use a custom sort function on an Array in Javascript
Sorting in Javascript with sort uses lexical sorting by default, which means it will sort in alphabe ...
- Seven times have I despised my soul 《我曾七次鄙视自己的灵魂》
<我曾七次鄙视自己的灵魂>,纪伯以“自己的灵魂”为名,看穿人性所共有弱点的一首诗.诗句简单有力发人深省,督促人们拥有更高的精神境界,呼吁人们涤荡自己的灵魂,唾弃丑恶,追求高尚. Seven ...
- Youth is not a time of life, it is a state of mind.
青春不是生命的一段,而是一种精神状态.
- Pat(Advanced Level)Practice--1018(Public Bike Management)
Pat1018代码 题目描写叙述: There is a public bike service in Hangzhou City which provides great convenience t ...
- 【LeetCode-面试算法经典-Java实现】【079-Word Search(单词搜索)】
[079-Word Search(单词搜索)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a 2D board and a word, find if ...
- centos下的hadoop服务器的配置
是我安装CentOS服务器的过程,记录下来,与大家一起分享. 安装操作系统 CentOS 6.2 ,CentOS-6.2-i386-bin-DVD1.iso(32位) ,CentOS-6.2-x86_ ...
- 手动编译一个c文件(Win7下如何使用GCC编译器)
主要参考这篇http://jingyan.baidu.com/article/c275f6bacc0126e33c756771.html 我没找到minGW的下载地址,而是直接用codeblocks自 ...
- excel 创建数据有效性及背景颜色
需求:用excel做数据或者表格时经常需要在一列中给出固定的几个进行悬着,这是如果每次键盘输入降低工作效率.如果做成鼠标双击进行选择,则提高很多效率,比如需要给一列填写Pass或Failure时,具体 ...