这题咕了好久.....


设$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. Java集合操作类Collections的一些常用方法

    public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); ...

  2. ACM学习历程—HDU4415 Assassin’s Creed(贪心)

    Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ...

  3. 关于redis,学会这8点就够了(转)

    1.redis是什么 redis是一种支持Key-Value等多种数据结构的存储系统.可用于缓存.事件发布或订阅.高速队列等场景.该数据库使用ANSI C语言编写,支持网络,提供字符串.哈希.列表.队 ...

  4. 【总结整理】http-https

    上面这种加密消息的方式就是对称加密,你知道如何加密,也知道如何解码.然后李雷跟韩梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凯撒加密.现实世界中用的加密算法会更复杂,但是基本原理相同 ...

  5. redis GEO地理位置命令介绍

    GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...

  6. wpf label下划线不显示的问题

    突然发现label设置content的值为字符串时,如果字符串中包含_的话,在展示出来时下划线就不见了,百度了一下,发现了问题根源,说的label的ContentPresenter默认将下划线处理成快 ...

  7. ubuntu14.04装完系统更新后桌面挂了

    一开始是只显示个鼠标什么都没有,ctrl-alt-1切到控制台下,把lightdm重启下再进去,多了两个桌面图标,但是顶栏和侧栏都没有,也就是根本没法运行其它程序. 但是幸好桌面右键菜单里有一个“在控 ...

  8. Java基础之cmd入门操作笔记

    前提:jdk已安装且环境变量配置成功,参考上文jdk 安装及环境变量配置 入门操作步骤: 1.打开记事本或者notepad,编写Abc代码,具体如下: public class Abc{    pub ...

  9. hdu1088

    #include <stdio.h> #include <string.h> int main() { char s[10000]; int len; int cnt = 0; ...

  10. 匿名委托(方法) 以 ThreadStart 为例

    Hello Tec.   匿名委托(方法) 以 ThreadStart 为例 REF:http://baike.baidu.com/view/2761370.htm?fr=aladdin   不使用匿 ...