题目大意:

一个人在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. php 生成饼状图,折线图,条形图 通用类 2

    生成饼状图,折线图,条形图通用的php类,这里使用的是国外的 HighCharts,前台页面别忘了调用HighCahrt  js HighCharts中文网站  http://www.hcharts. ...

  2. wkWebView 的一些问题

    导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷 ...

  3. phpstorm中快速添加函数注释

    Preferences 或 command+,快捷键 Live Templates - PHP 下方 - 新建模板 ,Abbreviation 命名随便写,点击Edit Variables配置变量信息 ...

  4. SQL 导出csv

    https://jingyan.baidu.com/album/4b07be3c466b5d48b280f37f.html?picindex=9

  5. Oracle EXPDP and IMPDP

    一.特点 • 可通过 DBMS_DATAPUMP 调用 • 可提供以下工具: – expdp – impdp – 基于 Web 的界面 • 提供四种数据移动方法: – 数据文件复制 – 直接路径 – ...

  6. 使用Eclipse进行PHP的服务器端调试

    最近工作需要对PHP的服务器端代码进行远程调试,涉及到Eclipse里环境的设置.在网上找了很多资料,大多不全,或者缺少配图,于是把自己做的过程中遇到的问题记录了下来,希望对需要的朋友们有所帮助. 首 ...

  7. Linux OpenGL 实践篇-11-shadow

    OpenGL 阴影 在三维场景中,为了使场景看起来更加的真实,通常需要为其添加阴影,OpenGL可以使用很多种技术实现阴影,其中有一种非常经典的实现是使用一种叫阴影贴图的实现,在本节中我们将使用阴影贴 ...

  8. String系列之replaceAll方法替换.

    直接使用String类的replaceall方法的第一个参数并不是简单的字符串,而是一个正则表达式.在正则表达式中,英文点号(.)表示任意字符,所以你原先的写法会把所有字符都替换成空白. 转义使用所以 ...

  9. 阿里云人脸比对API封装

    这是根据封装是根据阿里云官方给的Demo进行修改的,当时是因为编写微信小程序云函数需要使用到阿里云人脸比对接口,才对其进行封装的. 记录下来,方便下次使用. 复制下来可以直接使用. 用到的依赖如下: ...

  10. MFC中EDIT控件实现换行

    \n是C下的回撤换行.在MFC下得用\r\n.