这题咕了好久.....


设$f[i][j]$表示从$(i,j)$到最后一行的期望步数;

则有

$ f[i][1]=\frac{1}{3}(f[i][1]+f[i][2]+f[i+1][1])+1$

$ f[i][m]=\frac{1}{3}(f[i][m]+f[i][m-1]+f[i+1][m])+1$

$ f[i][j]=\frac{1}{4}(f[i][j]+f[i][j-1]+f[i][j+1]+f[i+1][j])+1$

所以他有后效性(于是我们疯狂迭代)

然而要高斯消元。。。。

具体的来说,就是把每行的每个转移都写在系数矩阵里,对这一行进行高斯消元;增广矩阵要写已知量;

化简上面的式子:

$\frac{2}{3}*f[i][1]-\frac{1}{3}*f[i][2]=\frac{1}{3}*f[i+1][1]+1 $

$\frac{2}{3}*f[i][m]-\frac{1}{3}*f[i][m-1]=\frac{1}{3}*f[i+1][m]+1$

$\frac{3}{4}*f[i][j]-\frac{1}{4}*f[i][j-1]-\frac{1}{4}*f[i][j+1]=\frac{1}{4}*f[i+1][j]+1$

注意,高斯消元消的是某一行,每个位置的值。

又注意到上面的有分数不美观,实际写的时候可以化简(方程两边同乘1个数)。

还有,高斯消元的过程需要简化

深蓝代表系数矩阵中有数的位置,浅灰蓝色为增广矩阵。

先消成这个样子:

然后从最后一行向上代入

#include<cstdio>
#include<iostream>
#define R register int
#define db double
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,x,y;
db f[],a[][];
inline void init() {
a[][]=,a[][]=-,a[][m+]=+f[];
a[m][m]=,a[m][m-]=-,a[m][m+]=+f[m];
for(R i=;i<m;++i) a[i][i]=,a[i][i-]=a[i][i+]=-,a[i][m+]=f[i]+;
}
inline void Gauss() {
for(R i=;i<=m;++i) { if(i<m) a[i][i+]/=a[i][i];
a[i][m+]/=a[i][i],a[i][i]=;
a[i+][i+]-=a[i][i+]*a[i+][i];
a[i+][m+]-=a[i][m+]*a[i+][i],a[i+][i]=;
} for(R i=m-;i;--i) a[i][m+]-=a[i][i+]*a[i+][m+];
for(R i=;i<=m;++i) f[i]=a[i][m+];
}
signed main() {
n=g(),m=g(),x=g(),y=g();
if(m==) printf("%.10lf\n",(db)*(n-x));
else { for(R i=n-;i>=x;--i) {
init(); Gauss();
} printf("%.10lf\n",f[y]);
}

2019.05.24

CF24D Broken robot 后效性DP的更多相关文章

  1. 『Broken Robot 后效性dp 高斯消元』

    Broken Robot Description 你作为礼物收到一个非常聪明的机器人走在矩形板上.不幸的是,你明白它已经破碎并且行为相当奇怪(随机).该板由N行和M列单元组成.机器人最初位于第i行和第 ...

  2. 【题解】CF24D Broken Robots(收敛性)

    [题解]CF24D Broken Robots http://codeforces.com/problemset/problem/24/D 解1(不会写,口胡的) 获得一个比较显然的转移式子 \(dp ...

  3. CF24D Broken robot

    题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这 ...

  4. CodeForces 24D Broken robot (概率DP)

    D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  5. Luogu P2973 [USACO10HOL]赶小猪Driving Out the Piggi 后效性DP

    有后效性的DP:$f[u]$表示到$u$的期望次数,$f[u]=\Sigma_{(u,v)} (1-\frac{p}{q})*f[v]*deg[v]$,最后答案就是$f[u]*p/q$ 刚开始$f[1 ...

  6. Cogs 376. [IOI2002]任务安排(后效性DP)

    [IOI2002]任务安排 ★☆ 输入文件:batch.in 输出文件:batch.out 简单对比 时间限制:1 s 内存限制:128 MB N个任务排成一个序列在一台机器上等待完成(顺序不得改变) ...

  7. $CF24D\ Broken Robot\ DP+$高斯消元

    Luogu Description 你收到的礼物是一个非常聪明的机器人,行走在一块长方形的木板上.不幸的是,你知道它是坏的,表现得相当奇怪(随机).该板由n行和m列的单元格组成.机器人最初是在i行和j ...

  8. cf24D. Broken robot(高斯消元)

    题意 题目链接 Sol 今天上午的A题.想出来怎么做了但是没时间写了qwq 思路很简单,首先把转移方程列一下,发现每一个位置只会从下一行/左右转移过来,而且第N行都是0,那么往下转移的都可以回带. 剩 ...

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

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

随机推荐

  1. 2017-2018-1 20179203 《Linux内核原理与分析》第三周作业

    攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  2. 文件系统(node.js学习笔记)

    根据nodejs菜鸟教程整理. 官方API文档:nodeJS文件系统API 其他整理:nodejs File System 文件系统操作函数分类 1.引用: 导入文件系统模块(fs)语句:var fs ...

  3. django TimedRotatingFileHandler log

    15.9.6. TimedRotatingFileHandler¶ The TimedRotatingFileHandler class, located in the logging.handler ...

  4. php命名空间(namespace)内如何使用系统类

    作者:ffsystem 使用命名空间,可以更方便的组织代码,以及代码复用.新写的一个项目引入了命名空间. 简介:使用namespace,使用__autoload自动导入类. 今天将以前的一段代码,加入 ...

  5. RS-485收发的零延时转换电路

    转自:http://www.dzsc.com/data/html/2007-5-28/41097.html RS-485是一种基于差分信号传送的串行通信链路层协议.它解决了RS-232协议传输距离太近 ...

  6. qtp ie_hook

    今天要讲的内容是注册异类子控件授予强制HOOK,名字有点抽象,简单的说就是在一个QTP可识别的A类插件窗口对象中存在着B类插件的控件对象, 最常见的例子就是在应用程序中内嵌一个Browser对象子控件 ...

  7. 集合对象与自定义javabean对象接收数据库查询的数据 (基础知识扫盲)

    一.集合对象(List,Map,数组)等对象接收数据库查询的记录,如果没有一条记录,就得到的内容为空的集合,不是null: 例如:List查不到记录得到的就是size=0的list 二.自定义的jav ...

  8. 串口发送Hex数组

    void MainWindow::String2Hex(QString str, QByteArray &senddata) { int hexdata,lowhexdata; ; int l ...

  9. DES加密/解密

    /// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { #region ========加密 ...

  10. NodeJS”热部署“代码,实现动态调试(hotnode,可以实现热更新)

    NodeJS”热部署“代码,实现动态调试   开发中遇到的问题 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会 ...