高斯消元求期望!!

将n时间点构成2*(n-1)的环,每一点的期望值为dp[i]=dp[i+1]*p1+dp[i+2]*p2+……+dp[i+m]*pm+1.

这样就可以多个方程,利用高斯消元求解。

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#define MAX 200
#define eps 1e-8
using namespace std;
double p[MAX],a[MAX][MAX],ans[MAX];
int N,n,m,num[MAX],row,col,cnt;
int gauss()
{
int k,i,j;
for(i=,j=;i<row&&j<col;i++,j++){
int m=i;
for(k=i+;k<row;k++)
if(fabs(a[k][j])-fabs(a[m][j])>eps)
m=k;
if(fabs(a[m][j])<eps) return ;
if(m!=i)
for(k=;k<=col;k++)
swap(a[i][k],a[m][k]);
double aa=a[i][j];
for(k=i+;k<row;k++){
double bb=a[k][j]/aa;
for(int l=j;l<=col;l++){
a[k][l]-=bb*a[i][l];
}
}
}
for(i=col-;i>=;i--){
for(j=i+;j<col;j++)
a[i][col]-=a[i][j]*ans[j];
ans[i]=a[i][col]/a[i][i];
}
return ;
}
void bfs(int s)
{
queue<int>q;
memset(num,-,sizeof(num));
cnt=;
num[s]=cnt++;
q.push(s);
while(!q.empty()){
int t=q.front();
q.pop();
for(int i=;i<=m;i++){
if(fabs(p[i])<eps) continue;
int k=(i+t)%n;
if(num[k]==-){
num[k]=cnt++;
q.push(k);
}
}
}
}
int main(){
int t,i,j,x,y,d,tm,k;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d%d",&N,&m,&y,&x,&d);
for(i=;i<=m;i++){
scanf("%lf",&p[i]);
p[i]/=100.0;
}
if(x==y){
printf("0.00\n");
continue;
}
n=*N-;
if(d==) x=n-x;
bfs(x);
if(num[y]==-&&num[n-y]==-){
printf("Impossible !\n");
continue;
}
memset(a,,sizeof(a));
memset(ans,,sizeof(ans));
row=col=cnt;
for(i=;i<n;i++)
if(num[i]!=-){
a[num[i]][num[i]]=;
if(i==y||i==n-y){
ans[num[i]]=;
continue;
}
for(j=;j<=m;j++){
tm=(i+j)%n;
if(num[tm]!=-){
a[num[i]][num[tm]]-=p[j];
a[num[i]][cnt]+=j*p[j];
}
}
}
if(gauss()) printf("%.2lf\n",ans[num[x]]);
else printf("Impossible !\n");
}
return ;
}

hdu 4418 Time travel 概率DP的更多相关文章

  1. HDU 4418 Time travel 期望dp+dfs+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4418 Time travel Time Limit: 2000/1000 MS (Java/Othe ...

  2. HDU 4418 高斯消元法求概率DP

    把两种状态化成2*n-2的一条线上的一种状态即可.很容易想到. 高斯列主元法,不知为什么WA.要上课了,不玩了...逃了一次课呢.. #include <iostream> #includ ...

  3. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

  4. HDU - 5001 Walk(概率dp+记忆化搜索)

    Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...

  5. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  6. HDU 2955 Robberies 背包概率DP

    A - Robberies Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  7. HDU-4418 Time travel 概率DP,高斯消元

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4418 题意:简单来说就是给你1个环(n - 1 , n - 2 …… 0 ,1 , 2 , 3 …… ...

  8. HDU 4576 Robot (概率DP)

    暴力DP求解太卡时间了...........写挫一点就跪了 //hdu robot #include <cstdio> #include <iostream> #include ...

  9. 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 ...

随机推荐

  1. CSS3/jQuery创意盒子动画菜单

    作为前端开发者,各种各样的jQuery菜单见过不少,这款jQuery/CSS3菜单却是别具一格,菜单项嵌入到九宫格中,像小盒子一样,加上温馨的背景,菜单整体外观十分可爱.点击菜单项,盒子就会展开,展示 ...

  2. Android发送请求到不同的Servlet,但都是一个Servlet处理

    错误原因,在Servlet文件中 @WebServlet("/ServletForGETMethod") 与实际的ServletForQUERYMethod 文件名不符. @Web ...

  3. Java中的集合类

    实线边框的是实现类,比如ArrayList,LinkedList,HashMap等 折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等, ...

  4. html关于强制显示 隐藏浏览器的滚动条

    浏览器的滚动条在一些特殊的展示中,是不需要的,所以必须把它隐藏掉,文章主要介绍一些隐藏或者显示IE的水平或者垂直滚动条的实现代码,需要了解的朋友可以参考下: 相关css代码如下: //强制显示滚动条: ...

  5. linux 关机方式

    linux 关机命令: 1-  init 0 关机. 具体详情接受可以 init --help 查询 如下: init [OPTIONS...] {COMMAND} Send control comm ...

  6. .Net Core下如何管理配置文件(转载)

    原文地址:http://www.cnblogs.com/yaozhenfa/p/5408009.html 一.前言 根据该issues来看,System.Configuration在.net core ...

  7. 《.NET简单企业应用》项目开发环境

    项目开始,开发团队需要构建一套开发环境,主要包含:开发工具.代码管理/版本控制系统.任务和Bug管理系统和持续集成(CI)系统.本文主要列举项目开发中经常使用的开发工具和第三方库. 本文所列工具根据前 ...

  8. Redis 二:入门基本篇

    .多数据库设置 - ,代表16个数据库 .glob风格通配符 keys * 返回所有 keys ba? 返回 bar keys b[a-z][a-z] 返回btt bar \x 匹配转义字符 .判断一 ...

  9. JNI-入门之二

    Android中JNI编程的那些事儿 首先说明,Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须是通过Java代码嵌入Native C/C++——即通过JNI的方式来使用本地(Na ...

  10. [ios]ipad下的splitViewController 让你的APP看起来酷酷的!

    在ipad下可以使用splitViewController splitViewController下包含两个viewController 这是一种将屏幕一分为二的方式. 在水平状态下会出现成两个左右两 ...