CF865C Gotta Go Fast
时间:2021-09-06
本文章向大家介绍CF865C Gotta Go Fast,主要包括CF865C Gotta Go Fast使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
发现这个重开操作十分鬼畜,活生生将每一个状态和初始状态连了一条边。
由于每次重开肯定是使得本次通过关卡的时间增多,所以最优的情况一定是这次一定必然比期望时间多时才重开,也就是说,最优的情况一定是重开时候的期望和最终的期望相同。
发现重开时候期望时间越大必然导致了最后通关时间变长,所以可以用二分答案加上一个 DP
解决。
设 \(f_{i, j}\) 表示现在在完成了前面 \(i\) 个任务点,已经花了 \(j\) 时间,还需要的时间期望值,有转移:
\[f_{i, j} = p_{i + 1} \times (f_{i + 1, j + F_{i + 1}} + F_{i + 1}) + (1 - p_{i + 1}) \times (f_{i + 1, j + S_{i + 1}} + S_{i + 1})
\]
重开的转移只在 \(i > 0\) 时存在:
\[f_{i, j} = \min(f_{i, j}, mid)
\]
其中 \(mid\) 是二分的答案。
时间复杂度 \(\mathcal O (n\times T \times \log A)\)
#include <bits/stdc++.h>
#define forn(i,s,t) for(register int i=(s); i<=(t); ++i)
#define form(i,s,t) for(register int i=(s); i>=(t); --i)
#define rep(i,s,t) for(register int i=(s); i<(t); ++i)
using namespace std;
typedef double f64;
const int N = 103, M = 100 * 103;
int n, m, F[N], S[N], p[N], pre[N], sumF, sumS; f64 f[N][M];
inline bool check(f64 mid) {
memset(f, 0, sizeof f);
forn(i,m + 1,sumS) f[n][i] = mid;
form(i,n - 1,0) forn(j,0,pre[i]) {
f[i][j] = 1.0 * p[i + 1] / 100 * (f[i + 1][j + F[i + 1]] + F[i + 1]) + 1.0 * (100 - p[i + 1]) / 100 * (f[i + 1][j + S[i + 1]] + S[i + 1]);
if(i) f[i][j] = min(f[i][j], mid);
}
return f[0][0] <= mid;
}
int main() {
scanf("%d%d", &n, &m);
forn(i,1,n) scanf("%d%d%d", F + i, S + i, p + i), sumF += F[i], sumS += S[i], pre[i] = pre[i - 1] + S[i];
f64 l = 0, r = 1e8, res = 1e3, mid;
while(r - l > 1e-8) {
mid = (l + r) * 0.5;
if(check(mid)) r = mid, res = mid;
else l = mid;
}
printf("%.7lf\n", res);
return 0;
}
原文地址:https://www.cnblogs.com/Ax-Dea/p/15234122.html
- 【2】快速代码集的由来及概览
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- Silverlight数据绑定/IValueConverter学习笔记
- silverlight:DeepZoom版的图片局部放大效果
- Linq之ToDictionary<TSource, TKey, TElement>的写法
- vs.net的调试小技巧之#define debug(适合新手)
- byte[]数组下标的最大值
- silverlight图片局部放大效果
- 局域网与互联网环境下MTU的快速确定方法
- 【4】通过简化的正则表达式处理字符串
- silverlight中的socket编程注意事项
- socket中的byte消息格式设计
- 在silverlight中利用socket发送图片或文件
- 多线程中的ManualResetEvent
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mongoose 实现关联查询和踩坑记录
- UWP开发01之Windows UI2.x
- 前端模块化:CommonJS,AMD,CMD,ES6
- 那些年,我们追过的RPC
- 设计模式~装饰模式
- Linux共享库、静态库、动态库详解
- strace详解及实战
- 推荐一个比crontab更好用的东西:crongo
- Vue 自定义指令
- IDEA + Spring Boot 的三种热加载方案,看完弄懂,不用加班~
- 开篇讲--关于Kali的碎碎念
- Mysql服务器SQL模式 (官方精译)
- 如何用Prometheus和Grafana监控Kubernetes集群?
- linux实时文件事件监听--inotify
- MySQL事务原理&实战【官方精译】