思路:由于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 ;
}

hdu 4579 Random Walk 概率DP的更多相关文章

  1. HDU 4579 Random Walk (解方程组)

    Random Walk Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)Total ...

  2. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

  3. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  4. Hdu 5001 Walk 概率dp

    Walk Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5001 Desc ...

  5. 【HDOJ】4579 Random Walk

    1. 题目描述一个人沿着一条长度为n个链行走,给出了每秒钟由i到j的概率($i,j \in [1,n]$).求从1开始走到n个时间的期望. 2. 基本思路显然是个DP.公式推导也相当容易.不妨设$dp ...

  6. HDU 2955 Robberies 背包概率DP

    A - Robberies Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  7. HDU 4576 Robot (概率DP)

    暴力DP求解太卡时间了...........写挫一点就跪了 //hdu robot #include <cstdio> #include <iostream> #include ...

  8. 2016ACM/ICPC亚洲区沈阳站H - Guessing the Dice Roll HDU - 5955 ac自动机+概率dp+高斯消元

    http://acm.hdu.edu.cn/showproblem.php?pid=5955 题意:给你长度为l的n组数,每个数1-6,每次扔色子,问你每个串第一次被匹配的概率是多少 题解:先建成ac ...

  9. HDU 4089 Activation:概率dp + 迭代【手动消元】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...

随机推荐

  1. VC6.0编译boost

    今天学习了下VC6.0下boost的编译,只是对regex进行了编译,据说全部编译需要2个多小时,在此记录下学习过程中遇到的问题以便今后查看. 最开始直接从网上(www.boost.org)下载了当前 ...

  2. javascript框架库API入口

    underscorejs : http://learning.github.io/underscore/

  3. javascript代码复用--继承

    由于javascript没有类的概念,因此无法通过接口继承,只能通过实现继承.实现继承是继承实际的方法,javascript中主要是依靠原型链要实现. 原型链继承 原型链继承是基本的继承模式,其本质是 ...

  4. windows store app 读写图片

    using System; using System.Threading.Tasks; using System.Runtime.InteropServices.WindowsRuntime; usi ...

  5. 让ImageView可以使用gif的方法

    在自己的包中添加MyGifView.java(直接复制,粘贴),读取gif资源在MyGifView中第20行读取: MyGifView.java: package com.zzw.testgifuse ...

  6. Oracle 10g RAC 启动与关闭

    一. 检查共享设备 一般情况下,存放OCR和Voting Disk的OCFS2 或者raw 都是自动启动的. 如果他们没有启动,RAC 肯定是启动不了. 1.1 如果使用ocfs2的 检查ocfs2 ...

  7. 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆

    看web看多了,想写写页游的外挂,其实原理是一样的,就是端口不一样协议字段你不知道,而这也提高了点技术门槛,看我们来一点一点突破这些门槛,这次我们来用python发包模拟flash的客户端登陆. 以热 ...

  8. 【转】Mac 上 java 究竟在哪里,本文彻底让你搞清楚!

    这篇文章可能比较适合那些在经常在Mac下进行Java编程开发,或者经常使用Java工具的朋友.不关心Java或者不了解Java的朋友可以绕过本文哈~ 1. Mac下当你在[终端]输入java -ver ...

  9. Redis 代理服务Twemproxy

    1.twemproxy explore 当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性.虽然Redis 2.6版 ...

  10. Ubuntu下安装eclipse及PyDev插件注意事项

    一.安装eclipse前一定要先安装jdk 1.到http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880 ...