题目传送门

题意:在n*m的网格上,有一个机器人从(x,y)出发,每次等概率的向右、向左、向下走一步或者留在原地,在最左边时不能向右走,最右边时不能像左走。问走到最后一行的期望。

思路:显然倒着算期望。

  我们考虑既不是最后一行,也不靠边的一般方格,设$f[i][j]$为(i,j)这个格子的期望步数,显然有

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

  移项有:$f[i][j]=\frac{1}{3}(f[i][j-1]+f[i][j+1]+f[i+1][j])+\frac{4}{3}$。

  在我们处理处第i+1行所有的情况时,对于第i行,我们能得到像上述一样m个方程m个未知数,所以可以用高斯消元来解。

  但是朴素的高斯消元是$n^3$的,显然会T,但是我们考虑此题的所有方程,写成行列式,会发现这个行列式只有对角线,和与对角线相邻的两行是有值的,这样按初中数学知识,就可以用$O(m)$的解除方程的解。

  注意特别m=1的情况即可。

#pragma GCC optimize (2)
#pragma G++ optimize (2)
#pragma comment(linker, "/STACK:102400000,102400000")
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,b,a) for(int i=b;i>=a;i--)
#define clr(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pii pair<int,int >
using namespace std;
typedef long long ll;
ll rd()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int maxn=;
double a[maxn][maxn],f[maxn][maxn],x[maxn];
int n,m,xx,yy;
void gauss(int id){
for(int i=;i<=m;i++){
double tmp=/a[i][i];
a[i][i]*=tmp;
x[i]*=tmp;
if(i==m)break;
a[i][i+]*=tmp;
a[i+][i+]-=a[i][i+]*a[i+][i];
x[i+]-=x[i]*a[i+][i];
a[i+][i]=;
}
f[id][m]=x[m];
for(int j=m-;j>;j--){
x[j]-=a[j][j+]*x[j+];
f[id][j]=x[j];
}
}
int main(){
cin>>n>>m>>xx>>yy;
if(m==){
printf("%d\n",(n-xx)*);
return ;
}
for(int i=n-;i>=xx;i--){
a[][]=,a[][]=-0.5,x[]=1.5+f[i+][]/;
a[m][m]=,a[m][m-]=-0.5,x[m]=1.5+f[i+][m]/;
for(int j=;j<m;j++){
a[j][j]=;
a[j][j-]=-1.0/;
a[j][j+]=-1.0/;
x[j]=f[i+][j]/+4.0/;
}
gauss(i);
}
printf("%.6f\n",f[xx][yy]);
}

codeforces 24d Broken robot 期望+高斯消元的更多相关文章

  1. Codeforces.24D.Broken robot(期望DP 高斯消元)

    题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...

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

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

  3. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  4. 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元

    [题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...

  5. 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元

    [题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...

  6. [BZOJ3143][HNOI2013]游走(期望+高斯消元)

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

  7. CodeForces 24D Broken Robot

    题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 一 ...

  8. 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元

    如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...

  9. Codeforces Gym10008E Harmonious Matrices(高斯消元)

    [题目链接] http://codeforces.com/gym/100008/ [题目大意] 给出 一个n*m的矩阵,要求用0和1填满,使得每个位置和周围四格相加为偶数,要求1的数目尽量多. [题解 ...

随机推荐

  1. Java原理领悟-JMM(java内存模型认知)

    总线锁.缓存锁.MESI缓存一致性协议.CPU 层面的内存屏障 1.JMM定义: Java Memory Model(java内存模型)是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见 ...

  2. 在知乎上看到的几个关于C的奇淫技巧

    有一个鲜为人知的运算符叫”趋向于”, 写作“-->”.比如说如果要实现一个倒数的程序,我们可以定义一个变量x,然后让它趋向与0: 输出: 然后我们把 "x-->0" 换 ...

  3. 第一章 笔记本电脑安装Linux系统(Centos7)

    目标:通过[Linux+Docke+Nginx+Jenkins+k8s(Kubernetes)+CICD(自动化)]进行项目部署 内容:根据个人进度实时分章节记录自己所遇到的问题 一.准备工作 1.下 ...

  4. androidstudio 2.3.3 jni过程汇总(2):2、使用so文件

    2.使用so文件 1.在java文件中System.loadLibrary加载包,并且引入native方法. 2.在app/src/main/下新建jniLibs文件夹,将so包带arm文件夹形式导入 ...

  5. mongodb的学习 (3)

    聚合函数 - 添加基础数据:db.local.save({contry:'中国',name:'小明',score:77});db.local.save({contry:'中国',name:'小红',s ...

  6. es的日期格式

    https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-date-format.html 在es中,默认的时间类型为da ...

  7. Windows cmd 打开面板

    { 打开控制面板的命令是:“control”  打开控制面板  命令: rundll32.exe shell32.dll,Control_RunDLL  结果: 显示控制面板窗口.  例子:  Cal ...

  8. 【基础】Linux软件安装方法

    linux中wget .apt-get.yum rpm区别 wget 类似于迅雷,是一种下载工具, 通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理 名字是Wo ...

  9. go解析markdown转成html

    一.代码 package main import ( "fmt" "github.com/microcosm-cc/bluemonday" "gith ...

  10. jmeter测试之-脚本制作

    一.脚本录制  1.遇见的问题,回放的时候总是登录失败 解决方式:设置HTTP请求为—跟随重定向 2.新增一个用户的时候,脚本参数里面输入汉字,在浏览器查看的时候显示问号 解决方式:脚本编码方式增加u ...