题目大意:

一个人在n长的路径上走到底再往回,走i步停下来的概率为Pi , 求从起点开始到自己所希望的终点所走步数的数学期望

因为每个位置都跟后m个位置的数学期望有关

E[i] = sigma((E[i+j]+j)*P[j])

我们需要将模型转化一下,本来路径为012345这样,因为来回走,我们多定义n-2个点就是 0123454321然后利用取模就可以不断找到下一组相关的m个点

列出多元方程组,利用高斯消元解决问题

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int N = ;
#define eps 1e-8 double a[N][N] , x[N] , p[N] , sum;
int n,m,st,en,dire;
int id[N] , cnt;//cnt记录需要求解的未知数个数 queue<int> q;
bool bfs()
{
memset(id , - , sizeof(id));
cnt = ;
id[st] = cnt++;
q.push(st);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i= ; i<=m ; i++){
int v = (u+i)%n;
if(fabs(p[i])<eps || id[v]>=) continue;
id[v] = cnt++;
q.push(v);
}
}
return id[en]>= || id[n-en]>=; //终点有两个
}
//建立多元方程组
void build()
{
memset(a , , sizeof(a));
for(int i= ; i<n ; i++){
if(id[i] < ) continue;
int u=id[i];
a[u][u] = ;
if(u == id[en] || u == id[n-en]) {a[u][cnt]=;continue;}
for(int j= ; j<=m ; j++){
int v = (i+j)%n;
if(id[v]<) continue;
v = id[v];
a[u][v] -= p[j];
a[u][cnt] += p[j]*j;
}
}
/* for(int i=0 ; i<n ; i++)
{
for(int j=0 ; j<=n ; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}*/
} int gauss(int n)
{
int i,j,k;
for(i=,j= ; i<n&&j<n ; j++){
for(k=i ; k<n ; k++)
if(fabs(a[k][j])>=eps) break;
if(k<n){
if(i!=k){
for(int r=j ; r<=n ; r++)
swap(a[i][r],a[k][r]);
}
double tt=1.0/a[i][j];
for(int r=j ; r<=n ; r++)
a[i][r]*=tt;
for(int r= ; r<n ; r++) //这从 0~n ,整个2重循环相当于消去和回代同时操作
if(r!=i){
for(int t=n ; t>=j ; t--) //一定是递减序
a[r][t] -= a[r][j]*a[i][t];
}
i++;
}
}
//检查是否还有未满足的方程式
for(int r=i ; r<n ; r++)
if(fabs(a[r][n])>=eps)
return ;
return ;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in" , "r" , stdin);
#endif // ONLINE_JUDGE
int T;
scanf("%d" , &T);
while(T--)
{
scanf("%d%d%d%d%d" , &n , &m , &en , &st , &dire);
n = *n-;
sum = ;
for(int i= ; i<=m ; i++){
int v;
scanf("%d" , &v);
p[i] = v*1.0/100.0;
sum += p[i]*i;
}
if(st == en){
puts("0.00");
continue;
}
if(dire>) st = n-st;
if(!bfs()){
puts("Impossible !");
continue;
}
build();
if(!gauss(cnt)) {
puts("Impossible !");
continue;
}
printf("%.2f\n" , a[][cnt]); }
return ;
}

HDU 4418 高斯消元解决概率期望的更多相关文章

  1. [置顶] hdu 4418 高斯消元解方程求期望

    题意:  一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...

  2. hdu 4418 高斯消元求期望

    Time travel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 【BZOJ3143】游走(高斯消元,数学期望)

    [BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...

  4. HDU 2827 高斯消元

    模板的高斯消元.... /** @Date : 2017-09-26 18:05:03 * @FileName: HDU 2827 高斯消元.cpp * @Platform: Windows * @A ...

  5. First Knight UVALive - 4297(优化高斯消元解概率dp)

    题意: 一个矩形区域被分成 m*n 个单元编号为 (1, 1)至 (m, n),左上为 (1, 1),右下为(m, n).给出P(k)i,j,其中 1 ≤ i ≤ m,1 ≤ j ≤ n,1 ≤ k ...

  6. 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)

    JC的小苹果 Submit: 432  Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...

  7. BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)

    1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...

  8. hdu 3915 高斯消元

    http://acm.hdu.edu.cn/showproblem.php?pid=3915 这道题目是和博弈论挂钩的高斯消元.本题涉及的博弈是nim博弈,结论是:当先手处于奇异局势时(几堆石子数相互 ...

  9. HDU 3359 高斯消元模板题,

    http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...

随机推荐

  1. jquery选择器 选择除当前点击元素外所有的元素

    问题:  多个select选择,如果已选择某些value ,该value不可再选 思路: 点击当前元素,js列出除当前元素外所有的元素 当前解决办法: function symbolDefine(ob ...

  2. A. The Fault in Our Cubes 暴力dfs

    http://codeforces.com/gym/101257/problem/A 把它固定在(0,0, 0)到(2, 2, 2)上,每次都暴力dfs检查,不会超时的,因为规定在这个空间上,一不行, ...

  3. discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱

    又是一个周末,jquery特效继续折腾我那discuz论坛,我开启了个邮箱验证,恶意注册的太恶心了,没有办法. 能稍微屏蔽点,但是问题来了,据亲们反应,无法收到验证邮件,或者有时间直接进入垃圾箱,这个 ...

  4. IIS6配置FastCGI遇到ERROR5的解决方法

    FastCGI Error The FastCGI Handler was unable to process the request. ------------------------------- ...

  5. oracle PL、SQL(二)

    oracle PL.SQL(基础知识点二) --1,参数 in:表示输入类型,可以省略 :out:输出类型不能省略---------- ----案例1:编写一个过程,可以输入雇员的编号,返回该雇员的姓 ...

  6. html5 input 标签

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content ...

  7. # Transition:添加弹出过渡效果

    # Transition:添加弹出过渡效果 通过鼠标的单击.获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变CSS的属性值. W3C-transition MDN-transition ...

  8. pip install python-igraph 报错,C core of igraph 没有安装。

    (一)问题描述 Centos7 安装python-igraph时,pip install python-igraph 报错,C core of igraph 没有安装. failure: repoda ...

  9. params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render

    params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render

  10. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

    *题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...