Maximum Random Walk

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 756    Accepted Submission(s): 419

三维dp,一维的话根本没有办法开展,二维的话没办法保存当前位置或者最远位置,所以只能用三维的。

看不懂滚动数组之类的操作,只能傻傻的写。

具体内容在代码里标注了,三重循环,从i,j,k的状态递推它之后的状态。

在我看来,递推DP有两种,一种是从当前状态推出其他状态,一种是推导当前状态是怎么来的。

这个题只能写前者,因为如果写后者的话,K的更新比较麻烦,不好处理。

上一个题写后者就比较容易,还是得做题体会吧。。。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. #define ll long long
  5. #define inf 1000000000
  6. #define maxn 300
  7. #define maxm 100005
  8. #define eps 1e-10
  9. #define for0(i,n) for(int i=1;i<=(n);++i)
  10. #define for1(i,n) for(int i=1;i<=(n);++i)
  11. #define for2(i,x,y) for(int i=(x);i<=(y);++i)
  12. #define for3(i,x,y) for(int i=(x);i>=(y);--i)
  13. #define mod 1000000007
  14. inline int read()
  15. {
  16. int x=,f=;char ch=getchar();
  17. while(ch<''||ch>'') {if(ch=='-') f=-;ch=getchar();}
  18. while(ch>=''&&ch<='') {x=*x+ch-'';ch=getchar();}
  19. return x*f;
  20. }
  21. float dp[][][];//表示走了i步后到达j点b并且最远达到k的概率
  22. //什么时候考虑这个状态向外发散,什么时候考虑这个状态由其他几个状态飞来
  23. int main()
  24. {
  25. int T;
  26. while(~scanf("%d",&T))
  27. {
  28. for(int i=;i<=T;++i)
  29. {
  30. int index=read();
  31. mem(dp,);
  32. printf("%d ",index);
  33. int n=read();
  34. double pl,pr;
  35. scanf("%lf%lf",&pl,&pr);
  36. double pk=-pl-pr;
  37. dp[][][]=;
  38. int l=-n,r=+n;
  39. for(int j=;j<n;++j)//考虑的是,从j,k,h走向下一步的所有可能
  40. for(int k=l;k<=r;++k)
  41. for(int h=;h<=+n;++h)
  42. {
  43. dp[j+][k][h]+=dp[j][k][h]*pk;
  44. dp[j+][k-][h]+=dp[j][k][h]*pl;
  45. if(k+>h) dp[j+][k+][k+]+=dp[j][k][h]*pr;
  46. else dp[j+][k+][h]+=dp[j][k][h]*pr;
  47. }
  48. double ans=;
  49. for(int j=l;j<=r;++j)
  50. for(int k=;k<=r;++k)
  51. ans+=(k-)*dp[n][j][k];
  52. printf("%.4lf\n",ans);
  53. }
  54. }
  55. }

HDU 4487 Maximum Random Walk的更多相关文章

  1. Maximum Random Walk(概率dp)

    题意: 走n步,给出每步向左走概率l,向右走概率r,留在原地的概率 1-l-r,求能达到的最远右边距离的期望. 分析: 开始按期望逆求的方式分析,但让求的就是右边界没法退,懵了一会,既然逆着不能求,就 ...

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

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

  3. 加入商品分类信息,考虑用户所处阶段的 图模型 推荐算法 Rws(random walk with stage)

    场景: 一个新妈妈给刚出生的宝宝买用品,随着宝宝的长大,不同的阶段需要不同的物品. 这个场景中涉及到考虑用户所处阶段,给用户推荐物品的问题. 如果使用用户协同过滤,则需要根据购买记录,找到与用户处于同 ...

  4. 从Random Walk谈到Bacterial foraging optimization algorithm(BFOA),再谈到Ramdom Walk Graph Segmentation图分割算法

    1. 从细菌的趋化性谈起 0x1:物质化学浓度梯度 类似于概率分布中概率密度的概念.在溶液中存在不同的浓度区域. 如放一颗糖在水盆里,糖慢慢溶于水,糖附近的水含糖量比远离糖的水含糖量要高,也就是糖附近 ...

  5. 醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)

    世界上有些问题看似是随机的(stochastic),没有规律可循,但很可能是人类还未发现和掌握这类事件的规律,所以说它们是随机发生的. 随机漫步(Random  Walk)是一种解决随机问题的方法,它 ...

  6. Python编程:从入门到实践 - matplotlib篇 - Random Walk

    随机漫步 # random_walk.py 随机漫步 from random import choice class RandomWalk(): """一个生成随机漫步数 ...

  7. HDU 6047 - Maximum Sequence | 2017 Multi-University Training Contest 2

    /* HDU 6047 - Maximum Sequence [ 单调队列 ] 题意: 起初给出n个元素的数列 A[N], B[N] 对于 A[]的第N+K个元素,从B[N]中找出一个元素B[i],在 ...

  8. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  9. hdu 4579 Random Walk 概率DP

    思路:由于m非常小,只有5.所以用dp[i]表示从位置i出发到达n的期望步数. 那么dp[n] = 0 dp[i] = sigma(dp[i + j] * p (i , i + j)) + 1 .   ...

随机推荐

  1. 【转】C++ 值传递、指针传递、引用传递详解

    而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角 ...

  2. Win 无法安装 python 包

    Win 上使用 pip install 安装出错 使用 wheel 安装 pip install wheel 下载 编译包 http://www.lfd.uci.edu/~gohlke/pythonl ...

  3. NOIP2018 全国热身赛 第二场 (不开放)

    NOIP2018 全国热身赛 第二场 (不开放) 题目链接:http://noi.ac/contest/26/problem/60 一道蛮有趣的题目. 然后比赛傻逼了. 即将做出来的时候去做别的题了. ...

  4. WireShark抓包命令

    本机环回包 在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信.但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以. 具体方法如 ...

  5. SpringBoot之自动配置原理

    我在前面的Helloworld的程序中已经分析过一次,配置原理了: 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@En ...

  6. centos7上mysql8.0rpm方式安装

    首先是下载图解 1.首先卸载centos7中自带的mariadb rpm -qa|grep mariadb //查询出来已安装的mariadb rpm -e --nodeps 文件名 //卸载mari ...

  7. 【Ecshop】将内置的 FCkeditor 更换为 UEditor

    1.下载UE,解压到includes/,更名目录名为ueditor 注意更改配置后端文件上传路径,参考文档 2.修改admin/includes/lib_main.php,添加 /** * 生成编辑器 ...

  8. ecshop里提出来的js常用函数

    目录 Utils.js jquery.listTable.js 使用例子: ecshop里提出来的js常用函数 Utils.js /* $Id : utils.js 5052 2007-02-03 1 ...

  9. 动态规划:HDU1176-免费馅饼

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. easyui 判断密码是否输入一致

    1.首先要扩展validatebox,添加验证两次密码功能 $.extend($.fn.validatebox.defaults.rules, { eqPassword:{ validator:fun ...