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

题面

Codeforces

洛谷

有\(n\)个点,每个时刻第\(i\)个点和第\(j\)个点之间有\(p_{ij}\)的概率存在一条边。每个时刻可以沿着一条边走或者留在原地。求从\(1\)号点走到\(n\)号点的最优的期望时间。

题解

设\(E(x)\)表示从\(x\)走到\(n\)的最短期望时间,那么考虑当前停的这个点的下一步应该怎么走,首先,你一定会走向当前能够到达的所有点中,\(E(x)\)最小的那个,而如果所有可以到达的点的\(E(x)\)都大于当前点的期望,那么一定会留在原地。

抓住这样一个性质:我们不会走向期望比当前点的期望更加大的点。那么我们从小往大依次考虑出所有点的期望。这样子每次拓展一个点的复杂度就是\(O(n)\)的,一共拓展\(n\)轮,所以总的复杂度就是\(O(n^2)\)。

转移大概是这样的,我们假装所有后继都是按照\(E(x)\)从小往大枚举的。

\(E(x)=\sum_{i}E(i)*p_{xi}\prod_{j=1}^{i-1}(1-p_{xj})\)

即考虑所有可以选择的后继,因为我们肯定当前出现的所有边中,期望最小的那个走,所以当前这条边被选定的概率就是前面所有边都没有被选中的概率乘上这条边出现了的概率。

那么,我们考虑每次选定的最小期望,显然不会用比他大的期望去更新他,既然它是当前最小,那么所有未确定的点的期望都不可能用来更新这个点,所以当前确定的就一定是这个点。

注意一点,如果你确定了一个点之后,当前得到的这个值并不是实际的期望,考虑用来更新的那些边都没有出现,这个的概率是\(\prod (1-p_{xj})\),那么这么多的概率你会停留在原地,把它减过去再除过来,即还要除掉一个\(1-\prod p\)才是最终的期望。

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
#define MAX 1010
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,Q[MAX],h,t;
bool use[MAX],vis[MAX];
double E[MAX],p[MAX][MAX],prod[MAX];
int main()
{
n=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
p[i][j]=read()/100.00;
if(n==1){puts("0");return 0;}
for(int i=1;i<=n;++i)E[i]=1,prod[i]=1-p[i][n];
E[n]=0;vis[n]=true;
for(int i=1;i<=n;++i)
{
int u=0;double mn=1e18;
for(int j=1;j<=n;++j)
if(!vis[j]&&E[j]/(1-prod[j])<mn)
u=j,mn=E[j]/(1-prod[j]);
vis[u]=true;if(u==1){printf("%.10lf\n",E[1]/(1-prod[1]));return 0;}
for(int j=1;j<=n;++j)
E[j]+=(E[u]/(1-prod[u]))*p[j][u]*prod[j],prod[j]*=(1-p[j][u]);
}
return 0;
}

【CF605E】Intergalaxy Trips(贪心,动态规划)的更多相关文章

  1. CF605E Intergalaxy Trips 贪心 概率期望

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

  2. CF605E Intergalaxy Trips

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

  3. CF#335 Intergalaxy Trips

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

  4. 【51Nod】1510 最小化序列 贪心+动态规划

    [题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...

  5. CodeForces 605 E. Intergalaxy Trips

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

  6. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

  7. POJ1065 Wooden Sticks(贪心+动态规划——单调递减或递增序列)

    描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于 第i个处理的木棒,那么将不会耗费时间,否则 ...

  8. BZOJ 3227 [Sdoi2008]红黑树(tree) ——贪心 动态规划

    首先可以想到一个贪心的方法,然后一层一层的合并. 也可以采用动态规划的方式,为了写起来好写,把点数*2+1,然后发现在本机上跑不过1500的数据. 交上去居然A掉了. 贪心 #include < ...

  9. HDOJ-1257(贪心/动态规划)

    最少拦截系统 HDOJ-1257 我做这题的思路就是采用暴力或者贪心.也就是每次循环选出从第一个未被选择的元素开始,依次把后面可以选择的元素作为一个系统.最后统计可以有多少个系统. 还有人的思路就是利 ...

随机推荐

  1. Python3入门(二)——Python开发工具Pycharm安装与配置

    一.概述 与IDEA同一家——Jetbrains出品的IDE,强大之处不再赘述 二.安装 点击下载一个合适的版本 参考网友的激活方式激活:https://blog.csdn.net/u01404481 ...

  2. WPF 嵌入winform 控件

    引入 WindowsFormsIntegration.dll   和   System.Windows.Forms.dll <Window x:Class="wgscd.Window1 ...

  3. 20155223 Exp2 后门原理与实践

    20155223 Exp2 后门原理与实践 实验预热 一.windows获取Linux shell Windows:使用 ipconfig 命令查看当前机器IP地址. 进入ncat所在文件地址,输入命 ...

  4. HTML基础之JS

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  5. GATT scan的流程

    BLE scan 在bluedroid的实现中,有两个接口:一个是discovery,一个是ble observe,这两者有什么区别呢? 这里追了一下代码发现,inquiry 是上层调用search ...

  6. java过滤器Filter笔记

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

  7. 【中间件】Redis 实战之主从复制、高可用、分布式

    目录 简介 持久化 主从复制 高可用 Redis-Sentinel .NET Core开发 分布式 Redis-Cluster 配置说明 常见问题 简介 本节内容基于 CentOS 7.4.1708, ...

  8. stl源码剖析 详细学习笔记 算法(1)

    //---------------------------15/03/27---------------------------- //算法 { /* 质变算法:会改变操作对象之值 所有的stl算法都 ...

  9. HTML 表格实例

    1.表格这个例子演示如何在 HTML 文档中创建表格. <p>每个表格由 table 标签开始.</p><p>每个表格行由 tr 标签开始.</p>&l ...

  10. zabbix设置微信报警的配置过程

    zabbix设置微信报警的配置过程 转发:https://blog.csdn.net/qq_31613055/article/details/78831607 微信企业号的申请 注册的地址https: ...