题目链接


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

令\(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. python网络爬虫笔记(五)

    一.python的类对象的继承 1.所有的父类都是object类,由于类可以起到模块的作用,因此,可以在创建实例的时候,巴西一些认为必须要绑定的属性填写上去,通过定义一个特殊的方法 __init__, ...

  2. BrupSuite渗透测试笔记(十一)

    一.数据查找和拓展功能的使用 1.BrupSuite高级功能在界面布局上主要分成两个部分,一是菜单栏,另一个是Engagement tools,Brup菜单下包含的数据查找Search 组件状态存储. ...

  3. Dinner

    问题 : Dinner 时间限制: 1 Sec  内存限制: 32 MB 题目描述 Little A is one member of ACM team. He had just won the go ...

  4. c++ 链表基础功能实现

    #include<stack> struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* CreateListNode ...

  5. MS-DOS运行java工程

    D:\SourceCode\mailProxy\out\production\examples>java -classpath .;org\roger\stud y\mailClient;D:\ ...

  6. 集腋成裘-06-angularJS -angular_02

    1.0 选项卡 其中涉及到了三目运算符号; <!DOCTYPE html> <html ng-app="test"> <head> <me ...

  7. 在Ubuntu下创建一个新的用户

    Step1:添加新用户useradd -r -m -s /bin/bash 用户名 Step2:配置新用户密码passwd 用户名 Step3:给新添加的用户增加ROOT权限vim /etc/sudo ...

  8. paython3-练习

    在文本每行末尾加; f = open(r'D:\test1\1.txt','rb') w = open(r'D:\test1\2.txt','wb') for line in f.readlines( ...

  9. logging模板日志格式

    logging模板日志格式 创建loginfo.py模块,然后导入定义的logging配置,即可使用 cat loginfo.py """ logging配置 " ...

  10. UEditor黑白名单配置

    在网上找了很多,都不对.自己尝试,代码如下: 在new UEditor之前加上: Object.assign(window.UEDITOR_CONFIG.whitList, { filling: [' ...