完全图,\(1 \leq n \leq 1000\)每一天边有 \(p_{i,j}=\frac{A_{i,j}}{100}\) 的概率出现,可以站在原地不动,求 \(1\) 号点到 \(n\) 号点期望天数。


注意 Windows 下 double 读入异常地慢,而自己 Linux 下读入巨快……

首先,每个点肯定都会往期望更小的点走。如果目标点期望比自己大,还不如原地不动。

所以点构成了一个全序关系。显然对于每个点,它的决策是确定的。

所以当确定一个点的最小期望值时,需要确定一个排列 \(P\) 使得方程解出来的 \(E_1\) 最小,且 \(E_{P_i}\) 随着 \(i\) 增加单调不降:

\[E_{P_i} = \sum_{j \leq i} E_{P_j} \cdot p_{P_i,P_j} \cdot \prod_{k<j} \left( 1 - p_{P_i,P_k} \right)
\]

但是这样考虑太麻烦了,我们考虑倒着做:因为当 \(i\) 越小时, \(E_{P_i}\) 的式子越简单。

因此考虑从 \(n\) 号点往回递推,当我们确定 \(P_i\) 时,对于每个点,它的式子前几项都已经求出来了,对 \(j = i\) 移项,每次取能解出的最小的 \(E\)。即 dijkstra 地求。

需要类似前缀和优化的技巧。

考虑正确性:

不妨假设最终的 \(E_i\) 互不相同。

我们假设确定 \(P_i\) 时最小的那个叫 \(A\),然而我们顶替了一个 \(E\) 更大的 \(B\) 上去,那么 \(A\) 可以不走到 \(P_j (j \geq i)\) 的点达到更优解,那么就发生了 \(E_A < E_B\),全序关系被破坏,矛盾。

#include <bits/stdc++.h>

const int MAXN = 1010;
double P[MAXN][MAXN];
double E[MAXN], prod[MAXN], dis[MAXN];
bool vis[MAXN];
int n;
int main() {
std::ios_base::sync_with_stdio(false), std::cin.tie(0);
std::cin >> n;
for (int i = 1; i <= n; ++i)
for (int j = 1, t; j <= n; ++j)
std::cin >> t, P[i][j] = t / 100.;
for (int i = 1; i < n; ++i)
dis[i] = 1e100, E[i] = prod[i] = 1;
dis[n] = 0;
for (int i = 1; i <= n; ++i) {
int at = 0;
for (int j = 1; j <= n; ++j)
if (!vis[j] && (!at || dis[at] > dis[j])) at = j;
vis[at] = true;
for (int j = 1; j <= n; ++j) if (!vis[j]) {
E[j] += dis[at] * prod[j] * P[j][at];
prod[j] *= 1 - P[j][at];
dis[j] = E[j] / (1 - prod[j]);
}
}
std::cout << std::fixed << std::setprecision(15) << dis[1] << std::endl;
return 0;
}

E. Intergalaxy Trips的更多相关文章

  1. CF#335 Intergalaxy Trips

     Intergalaxy Trips time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. 【CF605E】Intergalaxy Trips(贪心,动态规划)

    [CF605E]Intergalaxy Trips(贪心,动态规划) 题面 Codeforces 洛谷 有\(n\)个点,每个时刻第\(i\)个点和第\(j\)个点之间有\(p_{ij}\)的概率存在 ...

  3. CodeForces 605 E. Intergalaxy Trips

    E. Intergalaxy Trips time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...

  4. CF605E Intergalaxy Trips

    CF605E Intergalaxy Trips 考虑你是不知道后来的边的出现情况的,所以可以这样做:每天你都选择一些点进行观察,知道某天往这些点里面的某条边可用了,你就往这条边走.这样贪心总是对的. ...

  5. [Codeforces]605E Intergalaxy Trips

    小C比较棘手的概率期望题,感觉以后这样的题还会贴几道出来. Description 给定一个n*n的邻接矩阵,邻接矩阵中元素pi,j表示的是从 i 到 j 这条单向道路在这一秒出现的概率百分比,走一条 ...

  6. CF605E Intergalaxy Trips 贪心 概率期望

    (当时写这篇题解的时候,,,不知道为什么,,,写的非常冗杂,,,不想改了...) 题意:一张有n个点的图,其中每天第i个点到第j个点的边都有$P_{i, j}$的概率开放,每天可以选择走一步或者留在原 ...

  7. Intergalaxy Trips CodeForces - 605E (期望,dijkstra)

    大意: 给定矩阵$p$, $p_{i,j}$表示每一秒点$i$到点$j$有一条边的概率, 每秒钟可以走一条边, 或者停留在原地, 求最优决策下从$1$到$n$的期望用时. $f_x$为从$x$到$n$ ...

  8. [LeetCode] Trips and Users 旅行和用户

    The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are b ...

  9. 【Leetcode-Mysql】Trips and Users

    思路不总结了,看过题目自己尝试过之后,看下方代码应该能理解的 SELECT Request_at AS DAY, round( sum( CASE WHEN STATUS = 'completed' ...

随机推荐

  1. Go语言操作NoSql

    NSQ平台 NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ. NSQ NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. N ...

  2. MySQL优化 - 性能分析与查询优化(转)

    出处:  MySQL优化 - 性能分析与查询优化 优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根据应用负载 ...

  3. 教你如何进行移动端APP测试

    1.安全测试(权限) 1)软件权限:其中包括发送信息,拨打电话,链接网络,访问手机信息,联系人信息等等 2)数据在本地的存储.传输等 3)执行某些操作时导致的输入有效性验证.授权.数据加密等方面 4) ...

  4. sqlserver跨库操作数据

    垮库只能读操作,写操作需要设置权限. USE [jdddb] GO /****** Object: StoredProcedure [dbo].[proc_LYOrderCancel] Script ...

  5. SQL游标示例

    DECLARE @@totalNum INT;SET @@totalNum=0;DECLARE @num INT;DECLARE @CustomInfo NVARCHAR(MAX);DECLARE M ...

  6. 4. Java入门程序

    以eclipse为例,建立一个简单的Java程序. 首先启动eclipse,进入到如下主页面: 新建一个项目,选择“File-New-Java Project”: 弹出了一个如下页面,假设命名为Tes ...

  7. eclipse debug 调试找不到资源问题解决

    eclipse debug 的时候,如果使用maven bulid,就可能找不到class,这种情况就需要先停止服务,然后配置 Run configurations-Source,然后remove掉D ...

  8. asp.net mvc5 DataBase First下model校验问题(MetadataType使用)

    最近学习asp.net mvc5,使用   asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是c ...

  9. 针对nginx应用场景的配置 知识整理

    本文为转载,原文链接 前言 原本想写整理一篇针对nginx应用场景的相应配置,但发现已经有人整理了,而且写得非常不错,特意转过来 概论 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 ...

  10. 判断一个python字符串中是否包含中文字符

    #在python中一个汉字算一个字符,一个英文字母算一个字符 #用 ord() 函数判断单个字符的unicode编码是否大于255即可. def is_contain_chinese(check_st ...