把N个点先转化为2*N-2个点。

比方说把012345转化成0123454321。

这样,就能够找出随意两两个点之间的关系。

然后依据关系能够得出来一个一元多项式的矩阵。

然后就用高斯消元求出矩阵就可以。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
using namespace std;
#define eps 1e-6
#define zero(x) ((fabs(x)<eps?0:x))
#define maxn 220
double a[maxn][maxn];
int g[maxn],cnt;
int n,m,st,ed;
double p[maxn];
int guss(int n)
{
int r;
for(int i=0;i<n;i++)
{
r=i;
for(int j=i+1;j<n;j++)
{
if(fabs(a[j][i])>fabs(a[r][i]))r=j;
}
if(!zero(a[r][i]))return 0;
if(r!=i){
for(int j=0;j<=n;j++)
swap(a[i][j],a[r][j]);
}
for(int j=i+1;j<=n;j++)a[i][j]/=a[i][i];
a[i][i]=1.0;
for(int j=0;j<n;j++)
{
if(j==i)continue;
for(int k=i+1;k<=n;k++)
{
a[j][k]-=a[i][k]*a[j][i];
}
a[j][i]=0;
}
}
return 1;
}
void bfs()
{
queue<int>que;
while(!que.empty())que.pop();
que.push(st);
memset(g,-1,sizeof(g));
cnt=0;
g[st]=cnt++;
while(!que.empty())
{
int x=que.front();
que.pop();
for(int i=1;i<=m;i++)
{
if(!zero(p[i]))continue;
int y=(i+x)%n;
if(g[y]==-1)
{
g[y]=cnt++;
que.push(y);
}
}
}
}
int main()
{
int T,d;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d",&n,&m,&ed,&st,&d);
for(int i=1;i<=m;i++)
{
scanf("%lf",&p[i]);
p[i]=1.0*p[i]/100.0;
}
if(ed==st)
{
puts("0.00");
continue;
}
n=2*n-2;
if(d==1)st=n-st;
bfs();
if(g[ed]==-1&&g[n-ed]==-1){
puts("Impossible !");
continue;
}
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
if(g[i]==-1)continue;
if(i==ed||i==n-ed)
{
a[g[i]][g[i]]=1;
a[g[i]][cnt]=0;
continue;
}
a[g[i]][g[i]]=1.0;
for(int j=1;j<=m;j++)
{
int y=(i+j)%n;
if(g[y]==-1)continue;
a[g[i]][g[y]]-=p[j];
a[g[i]][cnt]+=1.0*j*p[j];
}
}
if(!guss(cnt))puts("Impossible !");
else printf("%.2lf\n",a[g[st]][cnt]);
}
return 0;
}

hdu-4418-Time travel-高斯+概率dp的更多相关文章

  1. [ACM] hdu 4418 Time travel (高斯消元求期望)

    Time travel Problem Description Agent K is one of the greatest agents in a secret organization calle ...

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

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

  3. HDU 5781 ATM Mechine (概率DP)

    ATM Mechine 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 Description Alice is going to take ...

  4. HDU 4050 wolf5x(动态规划-概率DP)

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

  5. hdu 4405 Aeroplane chess (概率DP)

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. hdu 3076 ssworld VS DDD (概率dp)

    ///题意: /// A,B掷骰子,对于每一次点数大者胜,平为和,A先胜了m次A赢,B先胜了n次B赢. ///p1表示a赢,p2表示b赢,p=1-p1-p2表示平局 ///a赢得概率 比一次p1 两次 ...

  7. HDU 4336——Card Collector——————【概率dp】

    Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. hdu 4418 Time travel 概率DP

    高斯消元求期望!! 将n时间点构成2*(n-1)的环,每一点的期望值为dp[i]=dp[i+1]*p1+dp[i+2]*p2+……+dp[i+m]*pm+1. 这样就可以多个方程,利用高斯消元求解. ...

  9. HDU 4418 Time travel

    Time travel http://acm.hdu.edu.cn/showproblem.php?pid=4418 分析: 因为走到最后在折返,可以将区间复制一份,就变成了只往右走,01234321 ...

  10. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

随机推荐

  1. 3890: [Usaco2015 Jan]Meeting Time( dp )

    简单的拓扑图dp.. A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m) --------------------------- ...

  2. VS2010对C++11的支持列表(感觉大部分都不支持)

    c++11,就是之前的c++0x,已经成为了最新的c++标准.像咱这样天天用c++的,就赶紧follow一下.学习成果,放在这里,不说分享,至少自己增强下记忆. 首先,给出一些有用的链接. http: ...

  3. 64位与32位编程的数据类型区别(C/C++)

    C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长.在不同的平台上,根据编译器不同的实现,它们的字长如下表所示: 数据类型 LP64 ILP64 LLP64 ILP32 LP ...

  4. mysql数据导出权限问题

    mysql数据导出的方法有非常多,比如mysqldump, mysql -e 'sql' > file, 这些都能够非常方便的导出数据,但是在使用普通用户导出数据的时候,出现了问题. 1 sel ...

  5. EasyUI - Tree 树组件

    效果: 数据库设计: 使用的数据: 其中的字段,是跟据要生成的树节点的属性定义的. text:代表要显示的字段名称. state:是否是目录节点. iconCls:节点的图标是什么. url:跳转的链 ...

  6. (摘录)MSMQ的简单介绍

    MSMQ(MicroSoft  Message  Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任 ...

  7. js 常用方法记事本

    1.获取被选中行的名称<tab选项卡中为iframe> /* S 获取首页被选中的选项卡名称 */ var currTab = $("#layout_center_tabs&qu ...

  8. boost::asio async_write也不能保证一次发完所有数据 一

    你要是看过basic_stream_socket的文档,里面提到async_write_some不能保证将所有要发送的数据都发出去.并且提到如果想这样做,需要使用boost asio的async_wr ...

  9. checkbox之checked的方法(attr和prop)区别

    1. $('#checkbox').click(function(){ if($('#checkbox').is(':checked')) { $(".sendmailhui"). ...

  10. oracle如何设置show parameter显示隐含参数

    在sqlplus中shwo parameter是显示不了隐藏参数的,需要做一个处理,如下所示:    以SYS用户登录: C:\Documents and Settings\guogang>sq ...