题目传送门

题意:在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]);
}

最新文章

  1. Tomcat7.0启动报错:java.lang.illegalargumentexception:taglib definition not consisten with specification version
  2. 123——Appium Girls活动
  3. 部署到IIS上的网站打开时总是显示无法找到资源解决方案
  4. c语言知识(找出大于2门成绩不及格的学生)
  5. C程序的构成及动态内存分配
  6. Java学习笔记-File类的基本方法
  7. 容易被误解的overflow:hidden
  8. Redis的字典(dict)rehash过程源代码解析
  9. FbinstTool(U盘启动盘制作工具) v1.606 免费绿色版
  10. [转]安装v2ray,部署手机电脑***
  11. Jenkins+Jmeter持续集成笔记(四:定时任务和邮件通知)
  12. Freemaker隐藏手机号和判断长度
  13. VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
  14. flex布局下, 内容改变 不重新渲染问题
  15. LaTeX技巧24:LaTeX常用命令集锦
  16. 20170622xlVBA多部门分类汇总同类合并单元格
  17. Word文档加密小技巧
  18. 进程间通信(java)--队列
  19. 深入理解php 匿名函数和 Closure
  20. 【转】C#计算两坐标点距离

热门文章

  1. 《构建之法》IT行业的创新 读书笔记 WEEK 5
  2. php调用系统命令的函数的比较
  3. Spark Core 1.3.1源码解析及个人总结
  4. 项目案例之Pipeline流水线及流水线发布PHP项目(二)
  5. 互斥量mutex简介
  6. CSS3 object-position/object-fit
  7. Java/sql找出oracle数据库有空格的列
  8. 每天一个Linux命令:mkdir(4)
  9. 1245. Tree Diameter
  10. linux进阶之路(一):linux入门