思路:由于m非常小,只有5。所以用dp[i]表示从位置i出发到达n的期望步数。

那么dp[n] = 0

dp[i] = sigma(dp[i + j] * p (i , i + j)) + 1 .   (-m <= j <= m)

从高位向低位暴力消元,每次消去比他高的变量。

如 dp[i] = a1 * dp[i - 1] + a2 * dp[i - 2] …… am * dp[i - m]。

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50002
using namespace std;
double a[MAX][],p[MAX][],consts[MAX],q;
int c[MAX],cc,l[MAX],r[MAX];
int main(){
int n,m,i,j,k;
while(scanf("%d%d",&n,&m)&&(n+m)){
memset(a,,sizeof(a));
for(i=;i<=n;i++){
cc=;
for(j=;j<=m;j++){
scanf("%d",&c[j]);
cc+=c[j];
}
p[i][m]=1.0;
for(j=-m;j<;j++){
p[i][j+m]=0.3*c[-j]/cc;
if(i+j>=) p[i][m]-=p[i][j+m];
}
for(j=;j<=m;j++){
p[i][j+m]=0.7*c[j]/cc;
if(i+j<=n) p[i][m]-=p[i][j+m];
}
}
for(i=n-;i>=;i--){
l[i]=max(,i-m);//记录该方程的下界
r[i]=min(n,i+m);//记录该方程的上界
for(j=;j<r[i]-l[i]+;j++)
a[i][j]=p[i][l[i]+j-i+m];
consts[i]=1.0;//记录常数
for(j=r[i];j>i;j--){//将比i高位的变量消去
if(j==n) a[i][j-l[i]]=;//dp[n]=0
else{
q=a[i][j-l[i]];
if(fabs(q)<1e-) continue;//从i到j的概率为0,不需计算
for(k=;k<j-l[j];k++)//将相应变量的系数相加
a[i][k+l[j]-l[i]]+=a[j][k]*q;
consts[i]+=consts[j]*q;//将常数项相加
}
}
q=1.0-a[i][i-l[i]];
for(j=;j<r[i]-l[i]+;j++)
a[i][j]/=q;
a[i][i-l[i]]=;
consts[i]/=q;
}
printf("%.2lf\n",consts[]);
}
return ;
}

最新文章

  1. Asp.net mvc自定义Filter简单使用
  2. UpdatePanel里的Repeater和DropDownList
  3. php 分页查询
  4. js 正则表达式 手机号
  5. Multipart Upload with HttpClient 4--reference
  6. delphi 编写一个dos 窗体
  7. SGU 152.Making round
  8. Rotation Lock Puzzle
  9. QThread 与 QObject的关系
  10. Windows免密码远程桌面
  11. Python代码分析工具之dis模块
  12. Flask 页面缓存逻辑,jinja2 过滤器,测试器
  13. Cocos2D中的ObjectAL简介
  14. wx.request 使用数据
  15. 在IDEA中实战Git-branch
  16. Python2.7-内置类型
  17. 复习ing
  18. CSU 2005 Nearest Maintenance Point(最短路+bitset)
  19. Vue的配置
  20. MySql计算两个日期的时间差函数

热门文章

  1. Windows phone 中一些实用的控件
  2. js 字符串“123”,变成整数123,不用parseInt 函数
  3. HTML5-Video &amp; Audio
  4. VMware Workstation中linux(centos)与windows7共享文件夹
  5. 基础学习总结(五)---baseAdapter、ContentProvider
  6. 51nod1269 B君的圆锥
  7. CLR via C# 混合线程同步构造
  8. Oracle 摘去数据块的面纱
  9. Arrays.asList的使用及异常问题
  10. Android中关于日期时间与时区的使用总结