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 . (-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的更多相关文章
- HDU 4579 Random Walk (解方程组)
Random Walk Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)Total ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- Hdu 5001 Walk 概率dp
Walk Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5001 Desc ...
- 【HDOJ】4579 Random Walk
1. 题目描述一个人沿着一条长度为n个链行走,给出了每秒钟由i到j的概率($i,j \in [1,n]$).求从1开始走到n个时间的期望. 2. 基本思路显然是个DP.公式推导也相当容易.不妨设$dp ...
- HDU 2955 Robberies 背包概率DP
A - Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- HDU 4576 Robot (概率DP)
暴力DP求解太卡时间了...........写挫一点就跪了 //hdu robot #include <cstdio> #include <iostream> #include ...
- 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 ...
- HDU 4089 Activation:概率dp + 迭代【手动消元】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...
随机推荐
- IOS绘图
#import "ViewController.h" #import "DrawView.h" @interface ViewController () @pr ...
- windows phone 8 开发系列(二)Hello Wp8!
上篇我们了解了WP8的环境搭建,从今天开始,我们就正式进入WP8的设计,开发阶段. 一. 项目模板介绍 打开vs,选择Windows Phone的项目模板,我们发现如下有很多模板,那么我们就从认识这些 ...
- ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK
看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...
- RxJava 平常使用
本文转载自: http://blog.csdn.net/theone10211024/article/details/50435325 一.Scheduler线程切换 这种场景经常会在“后台线程取数据 ...
- HTML:form表单总结,input,select,option,textarea,label
<form>标签是块级元素. form标签的标准属性有id,class,style,title,lang,xml:lang. 表单能够包含input元素(包含button,checkbox ...
- 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout
Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout 原作者项目意图实现类 ...
- Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】
当你在一个Linearlayout布局中只为一个组件设置android:layout_weight属性时,那么这个组件将默认填充Linearlayout的剩余空间(宽度与高度方向),而不用事先进行测量 ...
- WCF完全解析读书笔记第2章地址
1. 使用同一个绑定对象实现地址跨终结点共享 2. 地址报头帮助辅助寻址 3. 使用端口共享为多个服务使用相同端口 4. WCF终结点地址分为逻辑地址和物理地址, 客户端使用ClientViaBeha ...
- java实现合并两个已经排序的列表
相对于C++来说,Java的最大特点之一就是没有令人困惑的指针,但是我们不可否认,在某些特定的情境下,指针确实算的上一把利刃.虽然Java中没有明确定义出指针,但是由于类的思想,我们可以使用class ...
- ubuntu 12.04版本出现界面终端打开broken pipe,但是tty1这些可以。
sudo apt-get remove xserver-xorg sudo apt-get install xserver-xorg