高斯消元求期望!!

将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. 对 Sea.js 进行配置(一) seajs.config

    可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...

  2. 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

  3. 使用JavaScript实现弹出层效果

    声明 阅读本文需要有一定的HTML.CSS和JavaScript基础 设计 实现弹出层效果的思路非常简单:将待显示的内容先隐藏,在触发某种条件后(如点击按钮),将原本隐藏的内容显示出来. 实现 < ...

  4. AngularJS(13)-包含

    AngularJS 包含 使用 AngularJS, 你可以使用 ng-include 指令来包含 HTML 内容: 实例 <body> <div class="conta ...

  5. mac OS X下安装Redis及Thinkphp3.1使用Redis

    一.安装Redis 1.安装Homebrew 在终端输入ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/install/maste ...

  6. 小课堂Week10 例外处理设计的逆袭Part3

    小课堂Week10 例外处理设计的逆袭Part3 今天是<例外处理设计的逆袭>这本书阅读的第三天,也是最后一天,我们会主要通过实例,对Part2中提出的例外处理等级进行解读. Level1 ...

  7. 【转】Microsoft® SQL Server® 2012 Performance Dashboard Reports

    http://www.cnblogs.com/shanyou/archive/2013/02/12/2910232.html SQL Server Performance Dashboard Repo ...

  8. [转]null和""以及==与equals的区别

    String str1 = null; str引用为空 String str2 = ""; str引用为空串 直接点就是null没有分配内存空间,而""分配了内 ...

  9. 多线程中,static函数与非static函数的区别?

    最近在学习多线程,刚入门,好多东西不懂,下面这段代码今天想了半天也没明白,希望看到的兄弟姐妹能解释下. public class NotThreadSafeCounter extends Thread ...

  10. 【nodejs】jade模板入门

    使用jetbrians webstom创建空项目 1.创建package.json 引用依赖配置 { "name": "demojade", "des ...