正题

题目链接:https://www.luogu.com.cn/problem/CF605E


题目大意

给出\(n\)个点的一张完全有向图,每一天\(i\)到\(j\)的路径有\(p_{i,j}\)的概率出现。

询问从\(1\)出发走到\(n\)在最优策略下的期望天数。

\(1\leq n\leq 10^3,p_{i,i}=1\)


解题思路

设\(g_i\)表示从\(i\)到\(n\)的答案,那么\(g\)满足式子

\[g_i=\sum_{j=1}^{n}\frac{g_{j}}{\prod_{g_k<g_j}(1-p_{j,k})}\times p_{i,j}\times \prod_{g_k<g_j}(1-p_{i,k})
\]

注意到里面有条件\(g_k<g_j\),但是我们并不知道\(g\),好像就死循环了。

但是我们可以知道\(g_n\)肯定是最小的而且是\(0\),然后剩下第二小的只会受到\(g_n\)的影响,也就是这个里面有一个的\(g\)是完整的。

可以猜测这个第二小的肯定是剩下的\(g\)里面最小的那个,因为如果不是,那么显然不满足我们最小化的条件,从一个更大的走到了本应该可以更小的。

所以我们每次剩下的点中找到一个最小的\(\frac{g_{j}}{\prod_{g_k<g_j}(1-p_{j,k})}\)来更新它对其他点的影响即可。

时间复杂度\(O(n^2)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1100;
int n;bool v[N];
double p[N][N],prod[N],f[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%lf",&p[i][j]);
p[i][j]/=100.0;
}
}
if(n==1)return puts("0")&0;
for(int i=1;i<n;i++)
prod[i]=1-p[i][n],f[i]=1;
v[n]=1;
while(1){
double low=1e9;int x;
for(int i=1;i<=n;i++)
if(f[i]/(1-prod[i])<low&&!v[i])
low=f[i]/(1-prod[i]),x=i;
if(x==1)return printf("%.10lf",low)&0;
v[x]=1;
for(int i=1;i<=n;i++){
if(v[i])continue;
f[i]+=low*p[i][x]*prod[i];
prod[i]*=(1-p[i][x]);
}
}
return 0;
}

CF605E-Intergalaxy Trips【期望dp】的更多相关文章

  1. CF605E Intergalaxy Trips

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

  2. CF605E Intergalaxy Trips 贪心 概率期望

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

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

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

  4. CF#335 Intergalaxy Trips

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

  5. CodeForces 605 E. Intergalaxy Trips

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

  6. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  7. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  8. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  9. 【BZOJ-4008】亚瑟王 概率与期望 + DP

    4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 5 ...

  10. 期望dp BZOJ3450+BZOJ4318

    BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...

随机推荐

  1. springboot整合多数据源解决分布式事务

    一.前言        springboot整合多数据源解决分布式事务.             1.多数据源采用分包策略              2.全局分布式事务管理:jta-atomikos. ...

  2. git 的指定参考教程

    https://www.runoob.com/git/git-create-repository.html

  3. uwp 中的动画

    xml --------------------------------------- <Page x:Class="MyApp.MainPage" xmlns=" ...

  4. 真实机中安装CentOS

    前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就 ...

  5. 高德地图——骑行路线&骑行指定

    &plugin=AMap.Riding 也是[]中放json, 包含keyword和city,不能有途经1.骑行路线(关键字) <!DOCTYPE html> <html&g ...

  6. ASP.NET真分页_接前篇引用AspNetPager.dll进行数据分页

    一.前端准备工作 1.之前我写到过<Asp.net中引用AspNetPager.dll进行数据分页>  这种分页方式只能在前台将数据分页,而每次点击查询时对目标数据库还是全查询,这样不仅会 ...

  7. OpenCV waitKey 无法正常捕捉方向键(上下左右),总结和解决方案,可以用waitKeyEx

    在win10+python+opencv3.4.5,测试 while True: key = cv2.waitKey(0) print('key =', key) 依次按上.下.左.右方向键,输出: ...

  8. unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source 解决办法

    Project -> Properties -> C/C++ -> Precompiled Headers -> Precompiled Header -> 选择Not ...

  9. a、b、n为正整数且a>b,证明:若n|(a^n-b^n),则n|(a^n-b^n)/(a-b).

  10. GUI容器之布局管理器

    布局管理器 布局管理器:frame.setLayout(); 默认值为new flowLayout() 流式布局 frame.setLayout(new FlowLayout(FlowLayout.R ...