思路:由于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]。

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<algorithm>
  4. #include<iomanip>
  5. #include<cmath>
  6. #include<cstring>
  7. #include<vector>
  8. #define ll __int64
  9. #define pi acos(-1.0)
  10. #define MAX 50002
  11. using namespace std;
  12. double a[MAX][],p[MAX][],consts[MAX],q;
  13. int c[MAX],cc,l[MAX],r[MAX];
  14. int main(){
  15. int n,m,i,j,k;
  16. while(scanf("%d%d",&n,&m)&&(n+m)){
  17. memset(a,,sizeof(a));
  18. for(i=;i<=n;i++){
  19. cc=;
  20. for(j=;j<=m;j++){
  21. scanf("%d",&c[j]);
  22. cc+=c[j];
  23. }
  24. p[i][m]=1.0;
  25. for(j=-m;j<;j++){
  26. p[i][j+m]=0.3*c[-j]/cc;
  27. if(i+j>=) p[i][m]-=p[i][j+m];
  28. }
  29. for(j=;j<=m;j++){
  30. p[i][j+m]=0.7*c[j]/cc;
  31. if(i+j<=n) p[i][m]-=p[i][j+m];
  32. }
  33. }
  34. for(i=n-;i>=;i--){
  35. l[i]=max(,i-m);//记录该方程的下界
  36. r[i]=min(n,i+m);//记录该方程的上界
  37. for(j=;j<r[i]-l[i]+;j++)
  38. a[i][j]=p[i][l[i]+j-i+m];
  39. consts[i]=1.0;//记录常数
  40. for(j=r[i];j>i;j--){//将比i高位的变量消去
  41. if(j==n) a[i][j-l[i]]=;//dp[n]=0
  42. else{
  43. q=a[i][j-l[i]];
  44. if(fabs(q)<1e-) continue;//从i到j的概率为0,不需计算
  45. for(k=;k<j-l[j];k++)//将相应变量的系数相加
  46. a[i][k+l[j]-l[i]]+=a[j][k]*q;
  47. consts[i]+=consts[j]*q;//将常数项相加
  48. }
  49. }
  50. q=1.0-a[i][i-l[i]];
  51. for(j=;j<r[i]-l[i]+;j++)
  52. a[i][j]/=q;
  53. a[i][i-l[i]]=;
  54. consts[i]/=q;
  55. }
  56. printf("%.2lf\n",consts[]);
  57. }
  58. return ;
  59. }

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. IOS绘图

    #import "ViewController.h" #import "DrawView.h" @interface ViewController () @pr ...

  2. windows phone 8 开发系列(二)Hello Wp8!

    上篇我们了解了WP8的环境搭建,从今天开始,我们就正式进入WP8的设计,开发阶段. 一. 项目模板介绍 打开vs,选择Windows Phone的项目模板,我们发现如下有很多模板,那么我们就从认识这些 ...

  3. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  4. RxJava 平常使用

    本文转载自: http://blog.csdn.net/theone10211024/article/details/50435325 一.Scheduler线程切换 这种场景经常会在“后台线程取数据 ...

  5. HTML:form表单总结,input,select,option,textarea,label

    <form>标签是块级元素. form标签的标准属性有id,class,style,title,lang,xml:lang. 表单能够包含input元素(包含button,checkbox ...

  6. 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout 原作者项目意图实现类 ...

  7. Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】

    当你在一个Linearlayout布局中只为一个组件设置android:layout_weight属性时,那么这个组件将默认填充Linearlayout的剩余空间(宽度与高度方向),而不用事先进行测量 ...

  8. WCF完全解析读书笔记第2章地址

    1. 使用同一个绑定对象实现地址跨终结点共享 2. 地址报头帮助辅助寻址 3. 使用端口共享为多个服务使用相同端口 4. WCF终结点地址分为逻辑地址和物理地址, 客户端使用ClientViaBeha ...

  9. java实现合并两个已经排序的列表

    相对于C++来说,Java的最大特点之一就是没有令人困惑的指针,但是我们不可否认,在某些特定的情境下,指针确实算的上一把利刃.虽然Java中没有明确定义出指针,但是由于类的思想,我们可以使用class ...

  10. ubuntu 12.04版本出现界面终端打开broken pipe,但是tty1这些可以。

    sudo apt-get remove xserver-xorg sudo apt-get install xserver-xorg