高斯消元可以解决一系列DP序混乱的无向图上(期望)DP

DP序

DP序是一道DP的所有状态的一个排列,使状态x所需的所有前置状态都位于状态x前;

(通俗的说,在一个状态转移方程中‘=’左侧的状态应该在‘=’右侧的所有状态之后)

于是往往只有按DP序转移状态,才可以保证每个状态值的正确性

一道DP的状态序不是唯一的

常见的有:

某些DAG上dp按拓扑序转移;

某些树上DP先转移x点的子树,后转移x;

某些树上DP先转移x,后转移x点的子树;

线性DP左到右或右到左;

区间DP小到大;

某些记忆化搜索的第一次出栈顺序;

概率与期望

自行百度吧~

概率/期望DP

转移时涉及概率的DP,他可以是线性的、树上的、DAG上的、任何形式的;

其标志是转移时涉及概率,

如“状态x有p/q的概率转移到y,有(1-p/q)的概率转移到z”;

一般情况下概率/期望DP除了应该使用浮点数据类型存贮状态、可能可以通过概率有关的知识优化之外,与非概率期望DP没有什么不同;

然而又有一类概率/期望DP则不同;

即一部分DP序混乱的无向图概率/期望DP

无向图概率/期望DP

无向图DP,这里指的是在无向图上DP

无向图概率/期望DP并非一定是DP序混乱的,然而这里只讨论DP序混乱的那一部分;

DP序混乱,往往是指存在两个状态x,y,x可以转移到y,y也可以转移到x;

在非概率/期望DP中不可能存在这种情况——因为这会导致状态值不确定;

然而在概率/期望DP中这种情况却可以存在;

因为如果在此类DP中,存在DP序混乱的情况,一般是x的p/q可以转移到y,y的a/b可以转移到x;

于是经过了无穷次相互转移后,之后的转移增量趋向于无穷小,于是可以认为此时状态的值确定了下来;

于是,有了一种十分显然的想法——迭代相互转移的次数,直到精度符合要求;

然而这种想法是十分幼稚的——迭代层数无法确定,

于是得分的上限取决于你设定的迭代层数会在什么数据范围的情况下导致超时;

得分的下限则完全取决于出题人的心情,这意味着出题人很容易造出可以卡掉迭代层数很高的代码的数据;

于是有了用高斯消元处理DP序混乱的无向图概率/期望DP方法

高斯消元

高斯消元是一种解线性方程组的方法,

这里只介绍高斯消元解n元一次方程组(n元一次方程组是线性方程组的一类)

事实上,高斯消元法与我们数学中常用的消元法类似;

其流程是:

1.选定一个未知数xi,准备把他消去;

2.随便选定一个xi系数不为零的方程Xi,(若没有,则无解或无数解);

3.把其他所有方程都减去Xi的某倍数,促使除了Xi外,所有方程的xi被消去;

4.重复123,(每个未知数,每个方程只被选定一次),直到只剩下一个未知数一个方程;

5.按选定方程的倒序选定方程,不断把已知未知数的值带入其中得到新未知数的值;

有唯一解的条件,至少n个方程,在高斯消元过程中没有被作无解或无数解

代码:

 bool flag=true;
double matrix[N+][N+],ans[N+]; void Gauss(int n){
int i,j;
bool fl=false;
for(i=n;i>;i--)
if(matrix[i][n]>eps||matrix[i][n]<-eps){
swap(matrix[i],matrix[n]),fl|=;
break;
}
flag=fl;
if(!flag)return ;
for(i=;i<n;i++)
for(j=;j<=n;j++)
matrix[i][j]-=matrix[n][j]*matrix[i][n]/matrix[n][n];
if(n-)Gauss(n-);
if(!flag)return ;
for(i=;i<n;i++)
matrix[n][]-=matrix[n][i]*ans[i];
ans[n]=matrix[n][]/matrix[n][n];
}

观察代码可以看出其效率为$O(n^3)$

用高斯消元处理期望DP

高斯消元可以处理方程组;

于是列出关于n个状态的n个方程往往可以直接解得状态的值

于是把n个本质不同的状态转移方程列作方程组,用高斯消元求解即可解决一类DP序混乱的概率/期望DP;

例题

JS09有趣的游戏

HN13游走

......

是不是应该写几个题解呢...

延伸

待续......

高斯消元与期望DP的更多相关文章

  1. LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt

    题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...

  2. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  3. hdu 4870 rating(高斯消元求期望)

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. Luogu3232 HNOI2013 游走 高斯消元、期望、贪心

    传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...

  5. 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】

    刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...

  6. loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP

    题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...

  7. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  8. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  9. [ACM] hdu 4418 Time travel (高斯消元求期望)

    Time travel Problem Description Agent K is one of the greatest agents in a secret organization calle ...

随机推荐

  1. 缓存行和cpu缓存实例

    并发框架Disruptor译文 剖析Disruptor:为什么会这么快?(一)锁的缺点 剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充 剖析Disruptor:为什么会这么快?(三)伪 ...

  2. C#之初识单例模式

    当我们使用QQ的时候就会发现,他可以启动多个QQ,但是有时候,我们不想这样做,这时候我们就需要使用到单例模式. 1.将Form2的构造函数转为私有 using System.Windows.Forms ...

  3. OpenCV2计算机编程手册(二)基于类的图像处理

    1. 在算法设计中使用策略(Strategy)模式 策略设计模式的目标是将算法封装在类中.因此,可以更容易地替换一个现有的算法,或者组合使用多个算法以拥有更复杂的处理逻辑.此外,该模式将算法的复杂度隐 ...

  4. iOS开发总结——协议代理的认识

    1.前言 自今年5月底正式转iOS之后,天天get新技能,很多技能在脑子里回旋不吐不快,所以,写点东西整理一下.先从协议代理开始. 2.协议方法的声明 @protocol EventMenuBarDe ...

  5. P1494 小Z的袜子

    P1494 小Z的袜子 莫队板子题,对询问进行排序+分块,从而得到巧妙的复杂度 对于L,R的询问. 设其中颜色为x,y,z的袜子的个数为a,b,c... 那么答案即为 (a*(a-1)/2+b*(b- ...

  6. 【9】JMicro微服务-发布订阅消息服务

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. JMicro消息服务目前实现特性 a. JMicro只支持发布订阅消息服务,不支持队列式消息服务: b. 不支持消息持 ...

  7. OAuth 2.0 - Authorization Code授权方式详解

    I:OAuth 2.0 开发前期准备 天上不会自然掉馅饼让你轻松地去访问到人家资源服务器里面的用户数据资源,所以你需要做的前期开发准备工作就是把AppKey, AppSecret取到手 新浪获取传送门 ...

  8. Linux CentOS7系统中ssh的用法

    大家都知道,公司买上服务器,不可能实时在线操作虚拟机,也没有那个时间和精力登录到公司的云服务商官网进行操作,一来不安全,二来也效率不高. 如果是购买的虚拟主机,你可以使用ftp进行本地程序文件传输和从 ...

  9. zabbix数据库表结构解析

     下面开始介绍: 1.添加监控表结构详解 (1)hosts,存储被监控的机器的信息,表结构如下: (2)items (3)hosts_templates,存储机器和模版或者模版和模版之间的关系 由于模 ...

  10. Springboot+ajax传输json数组以及单条数据的方法

    Springboot+ajax传输json数组以及单条数据的方法 下面是用ajax传输到后台单条以及多条数据的解析的Demo: 结构图如下: 下面是相关的代码: pom.xml: <?xml v ...