题目大意:r*c个点,每个点有Aij的概率回到自己本身,Bij的概率向右一格,Cij的概率向下一格,求从(1,1)到(r,c)的期望步数。

题解:有了hdu4405的经验,从后往前推期望。那么,E(i,j)=E(i,j)*Aij+E(i,j+1)*Bij+E(i+1,j)*Cij+2,注意加上“又消耗了两点”,闪一下,变成E(i,j)=(E(i,j+1)*Bij+E(i+1,j)*Cij+2)/(1-Aij),问题马上产生!!!当Aij=1怎么办呢?

注意到Aij=1时,走进这个格就再也走不出来。因此你可以把到(i,j)的期望置0。这样,在计算期望的时候若用到这个点,可以当它不存在,不存在从到达这个点的情形。

它让你烦躁,为何不忽视它?

代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,m;
#define maxn 1011
#define eps 1e-9
double E[maxn][maxn],A[maxn][maxn],B[maxn][maxn],C[maxn][maxn];
int main()
{
while (scanf("%d%d",&n,&m)==)
{
for (int i=;i<=n;i++) for (int j=;j<=m;j++)
scanf("%lf%lf%lf",&A[i][j],&B[i][j],&C[i][j]);
E[n][m]=0.0;
for (int i=n;i>;i--) for (int j=m;j>;j--)
{
if (i==n && j==m) continue;
if (fabs(A[i][j]-)<eps) continue;
E[i][j]=(B[i][j]*E[i][j+]+C[i][j]*E[i+][j]+2.0)/(-A[i][j]);
}
printf("%.3lf\n",E[][]);
}
return ;
}

最新文章

  1. iis7下配置php出现404.17错误的解决办法
  2. Android优化
  3. Java中检测字符串的编码格式
  4. &lt;s:iterator&gt; 对list操作的一种方法
  5. FineUI开发实践-目录
  6. zlog小试(C语言日志工具)
  7. PHP中__autoload()的不解之处,求高手指点
  8. CSS+DIV实现文字一行内显示,并且过多的文字以点来代替
  9. HDU 4857 (反向拓扑排序 + 优先队列)
  10. import android.provider.Telephony cannot be resolved
  11. effective c++ 条款7 declare virtual destructor for polymophyc base class
  12. FileWriter字符输出流和FileReader字符输出流
  13. python2.6.6在centos6.4下安装
  14. Socket通信中的 BeginReceive与EndReceive
  15. linux查看是否安装Apache,mysql,python等
  16. python 在ubuntu下安装pycurl
  17. HttpServletRequest get
  18. Emacs中的代码折叠控制
  19. 使用Pandas将多个数据表合一
  20. 【分块】教主的魔法 @洛谷P2801/upcexam3138

热门文章

  1. AJPFX简述Java中this关键字的使用
  2. Android模板制作
  3. break,continue,return的区别
  4. Modal 高度 在里面css里写高 | iview
  5. Open Cascade:如何从AIS_Shape导出TopoDS_Shape?
  6. OpenCV2:总结篇 工具方法函数
  7. 读懂CommonJS的模块加载
  8. (一)Robot Framework安装
  9. IDEA中远程Debug调试
  10. 南阳理工 58 最少步数 (DFS)