HDU 4418 高斯消元解决概率期望
题目大意:
一个人在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 高斯消元解决概率期望的更多相关文章
- [置顶] hdu 4418 高斯消元解方程求期望
题意: 一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...
- hdu 4418 高斯消元求期望
Time travel Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【BZOJ3143】游走(高斯消元,数学期望)
[BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...
- HDU 2827 高斯消元
模板的高斯消元.... /** @Date : 2017-09-26 18:05:03 * @FileName: HDU 2827 高斯消元.cpp * @Platform: Windows * @A ...
- 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 ...
- 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)
JC的小苹果 Submit: 432 Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
- hdu 3915 高斯消元
http://acm.hdu.edu.cn/showproblem.php?pid=3915 这道题目是和博弈论挂钩的高斯消元.本题涉及的博弈是nim博弈,结论是:当先手处于奇异局势时(几堆石子数相互 ...
- HDU 3359 高斯消元模板题,
http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...
随机推荐
- php Try Catch多层级异常测试
<?php class a { public function a1 () { try { throw new Exception('123'); } catch (Exception $e) ...
- [BZOJ1040][ZJOI2008]骑士 基环树DP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目给出了$n$个点和$n$条无向边,即一棵基环树或者基环树森林. 如果题目给的关系 ...
- Bootstrap基本理论
Bootstrap,来自 Twitter,是目前最受欢迎的前段框架.Bootstrap是基于HTML.CSS.JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷 Bootstrap特点:优雅, ...
- 洛谷 P2680 运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...
- (转)Spring提供的CharacterEncoding和OpenSessionInView功能
http://blog.csdn.net/yerenyuan_pku/article/details/52902282 前面我们以一种更加优雅的方式集成了Spring4.2.5+Hibernate4. ...
- Python3基础教程(二十)—— flask介绍
基本概念 什么是Flask? Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 web 应用程序可以是一些 web 页面.博客.w ...
- 检查bug
用selective_search生成的坐标是(ymin,xmin,ymax,xmax),并且是从1开始的,不是从0 这是cache中的gt数据,明显看到有65535,说明很有可能是0-1变成了655 ...
- Android N requires the IDE to be running with Java 1.8 or later
Android Studio需要两个JDK: ide jdk和project jdk: 前者是IDE本身运行使用的JDK. 后者用于编译Java代码 Project JDK 可以通过file-&g ...
- Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/config/spring/applicationContext.xml]
在搭建SpringMVC框架的时候遇到了这个问题 问题的原因: 就是没有找到applicatoincontext.xml这个文件, 因为idea自动生成的路径不正确 因此需要再web.xml里面, ( ...
- Caused by: java.lang.IllegalArgumentException: Parameter Maps collection does not contain value for com.bj186.crm.mapper.UserMapper.Integer
在使用SSM整合myBatis的过程中遇到了这个问题. 问题的原因: 把parameterType错误的写成了parameterMap 解决办法: 将parameterMap修改为parameterT ...