题目链接


可能这儿的会更易懂一些(表示不想再多写了)。

令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数。那么有\(f[n][j]=0\)。

若\(m=1\),答案是\(2(n-x)\)。

否则,显然有$$f[i][1]=\frac13(f[i+1][1]+f[i][1]+f[i][2])+1\f[i][j]=\frac14(f[i+1][j]+f[i][j]+f[i][j-1]+f[i][j+1])+1,\ 1<j<m\f[i][m]=\frac13(f[i+1][m]+f[i][m]+f[i][m-1])+1$$

别忘了+1→_→

写成矩阵的形式,$$2f[i][1]-f[i][2]=f[i+1][1]+3\-f[i][j-1]+3f[i][j]-f[i][j+1]=f[i+1][j]+4\-f[i][m-1]+2f[i][m]=f[i+1][m]+3$$

然后就可以一行一行高斯消元了。

注意到矩阵是个三对角矩阵,我们可以\(O(n)\)完成消元。

具体就是用第\(i\)行的两个变量消掉第\(i+1\)行的第\(i\)个变量,最后到第\(m\)行可以直接算出\(f[i][m]\),代回去。

第一行有\(2f[1]-f[2]=g[1]\),消掉第二行的\(f[1]\)变成\(2.5f[2]-f[3]=g[2]+0.5g[1]\),系数改成\(2\)即\(2f[2]-0.8f[3]=0.8(g[2]+0.5g[1])\),重复\(m-2\)次即可。最后会得到\(m-1\)个\(2f[i]+a_if[i+1]=b_i\),用第\(m\)行求出\(f[m]\),迭代回去。


//62ms	7700KB
#include <cstdio>
#include <algorithm>
typedef long long LL;
const int N=1005; double A[N],B[N],f[N][N]; int main()
{
int n,m,x,y; scanf("%d%d%d%d",&n,&m,&x,&y);
if(m==1) return printf("%.5f\n",2.0*(n-x)),0;
for(int i=n-1; i>=x; --i)
{
A[1]=-1, B[1]=f[i+1][1]+3;
for(int j=2; j<m; ++j)
{
A[j]=-1, B[j]=4+f[i+1][j]+0.5*B[j-1];
double t=2/(3+0.5*A[j-1]); A[j]*=t, B[j]*=t;
}
B[m]=f[i+1][m]+3+0.5*B[m-1], f[i][m]=B[m]/(2+0.5*A[m-1]);
for(int j=m-1; j; --j) f[i][j]=(B[j]-f[i][j+1]*A[j])*0.5;
}
printf("%.5f\n",f[x][y]); return 0;
}

Codeforces.24D.Broken robot(期望DP 高斯消元)的更多相关文章

  1. 【CF24D】Broken Robot (DP+高斯消元)

    题目链接 题意:给定一个\(n\times m\)的矩阵,每次可以向→↓←移动一格,也可以原地不动,求从\((x,y)\)到最后一行的期望步数. 此题标签\(DP\) 看到上面这个肯定会想到 方法一: ...

  2. BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元

    BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...

  3. codeforces 24d Broken robot 期望+高斯消元

    题目传送门 题意:在n*m的网格上,有一个机器人从(x,y)出发,每次等概率的向右.向左.向下走一步或者留在原地,在最左边时不能向右走,最右边时不能像左走.问走到最后一行的期望. 思路:显然倒着算期望 ...

  4. Broken robot CodeForces - 24D (三对角矩阵简化高斯消元+概率dp)

    题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方 ...

  5. HDU 2262 Where is the canteen 期望dp+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...

  6. hdu4418 Time travel 【期望dp + 高斯消元】

    题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...

  7. 【noi2019集训题1】 脑部进食 期望dp+高斯消元

    题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...

  8. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元

    题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定   而且 ...

  9. P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...

随机推荐

  1. spring-data-mongo的MongoTemplate开发

    spring-data-mongo的MongoTemplate开发 1.在实体类Customer.Java中引入注解表明转换方式 @Document   //文档 public class Custo ...

  2. VisualSVN Server如何安装和使用

    首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html 这是二进制文件 ...

  3. js instanceof 检测某个对象是否是另一个对象的实例

    例如File对象 $("#file").change(function(){ console.log($(this)[0].files[0]) console.log($(this ...

  4. jenkins原理

      原理:Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 直白的说:这个jenkins是CI ...

  5. 开启或停止website

    1.添加:Microsoft.Web.Administration 2.代码: static void Main(string[] args) { var server = new ServerMan ...

  6. tensorflow:验证码的识别(下)

    上两篇详细的说明了验证码的识别,不过我们采用的是方法二,下面采用方法一.注意和方法二的区别. 验证码识别方法一: 把标签转为向量,向量长度为40.(4位数字验证码) 验证码的生成和tf.record的 ...

  7. 通过awk 和 sed 将多余的列剔除

    通过awk 和 sed 将多余的列剔除 名词注释: awk -F 指定分隔符 OFS 指定输出分隔符 sed sed "s/|/test/2" a.log 将第二个 | 线替换为 ...

  8. openmp查看最大线程数量

    CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(omp_test) find_package(OpenMP REQUIRED) i ...

  9. cf666 C. Codeword 组合数学

    题解: 首先暴力很显然 f[i][j]表示到第i个位置,串匹配到j 这样每次是n^2的 我们假设每个位置匹配的第一个位置 然后从这个到上一个位置一定不能等于这个串的值 ans=simga{i,C(i- ...

  10. 关于sizeof与#pragma pack 以及网络上关于字节对齐的一点感想

    工作中面试中对于字节对齐基本上是必考一个知识点,而很多面试是网络上上原题.基本上背一背就可以写正确,而关于4字节对齐我相信很多人也只是一个基本地了解,对于一些题目就感觉有问题,而且很多blog后面仍然 ...