bzoj 3270: 博物馆【dp+高斯消元】
好像是高斯消元解互相推(?)的dp的例子
首先考虑dp,设f[i][j]为一人在i一人在j的概率,点i答案显然就是f[i][i];
然后根据题意,得到转移是
\]
\]
这样他就可以用高斯消元解了
注意,当f[i][j]中i==j时,就不能去转移其他情况了,因为这样已经是结束状态了
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=405;
int n,m,sx,sy,h[N],cnt,id[25][25],tot;
double p[N],a[N][N],d[N];
struct qwe
{
int ne,to;
}e[N<<1];
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
h[u]=cnt;
}
void gaosi(int n)
{
for(int i=1;i<=n;i++)
{
int nw=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[nw][i])<fabs(a[j][i]))
nw=j;
for(int j=i;j<=n+1;j++)
swap(a[nw][j],a[i][j]);
for(int j=i+1;j<=n+1;j++)
a[i][j]/=a[i][i];
a[i][i]=1;
for(int j=i+1;j<=n;j++)
{
for(int k=i+1;k<=n+1;k++)
a[j][k]-=a[j][i]*a[i][k];
a[j][i]=0;
}
}
for(int i=n-1;i>=1;i--)
for(int j=i+1;j<=n;j++)
a[i][n+1]-=a[j][n+1]*a[i][j];
}
int main()
{
scanf("%d%d%d%d",&n,&m,&sx,&sy);
for(int i=1,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
d[x]++,d[y]++;
add(x,y),add(y,x);
}
for(int i=1;i<=n;i++)
scanf("%lf",&p[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
id[i][j]=++tot;
for(int x=1;x<=n;x++)
for(int y=1;y<=n;y++)
{
a[id[x][y]][id[x][y]]--;
if(x!=y)
a[id[x][y]][id[x][y]]+=p[x]*p[y];
for(int i=h[x];i;i=e[i].ne)
for(int j=h[y];j;j=e[j].ne)
if(e[i].to!=e[j].to)
a[id[x][y]][id[e[i].to][e[j].to]]+=(1-p[e[i].to])*(1-p[e[j].to])/d[e[i].to]/d[e[j].to];
for(int i=h[x];i;i=e[i].ne)
if(e[i].to!=y)
a[id[x][y]][id[e[i].to][y]]+=p[y]*(1-p[e[i].to])/d[e[i].to];
for(int i=h[y];i;i=e[i].ne)
if(e[i].to!=x)
a[id[x][y]][id[x][e[i].to]]+=p[x]*(1-p[e[i].to])/d[e[i].to];
}
a[id[sx][sy]][n*n+1]--;
// for(int i=1;i<=n*n;i++)
// {
// for(int j=1;j<=n*n+1;j++)
// printf("%.6f ",a[i][j]);
// puts("");
// }
gaosi(n*n);
for(int i=1;i<=n;i++)
printf("%.6f ",a[id[i][i]][n*n+1]/a[id[i][i]][id[i][i]]);
return 0;
}
bzoj 3270: 博物馆【dp+高斯消元】的更多相关文章
- bzoj 3270 博物馆(高斯消元)
[题意] 两人起始在s,t点,一人pi概率选择留在i点或等概率移动,问两人在每个房间相遇的概率. [思路] 把两个合并为一个状态,(a,b)表示两人所处的状态,设f[i]为两人处于i状态的概率.则有转 ...
- BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)
BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- LightOJ - 1151概率dp+高斯消元
概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
随机推荐
- Git学习之常见错误 git push 失败
Git学习之常见错误 git push 失败 问题描述: git push Counting objects: , done. Delta compression using up to thread ...
- OC-Xcode中导入runtime框架,函数参数没有提示的处理方法
在了解runtime时,如果自己编写runtime代码,需要先导入头文件: #import <objc/message.h> 之后,例如了解runtime的消息机制时,调用objc_msg ...
- JVM(零):走入JVM
JVM(零):走入JVM 本系列主要讲述JVM相关知识,作为本系列的第一篇文章,本文从Java为什么是一个跨平台的语音开始介绍,逐步引入Java虚拟机的概念,并给出一个JVM相关知识图谱,可以让读者从 ...
- 在访问RESTful接口时出现:Could not write content: No serializer found for class的问题解决小技巧收集
注意:市面上对于写RESTful是用RestFul,其实是不规范的,标准写法RESTful. 在Java上,处理这个应该是没有继承Serializable类,然后通过Eclipse生成serialVe ...
- Windows下SVN服务器及客户端的使用
原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...
- top命令行含义解析
快捷键“1”可以快速切换显示所有cpu的信息 快捷键‘x’可以高亮显示当前排序列 shift+方向键:可以快速切换排序的列 top -c 显示完整命令 load含义解释:http://www.ruan ...
- volatile关键字解析&内存模型&并发编程中三概念
原文链接: http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java5之前,它是一个 ...
- centos7备份还原与grub2引导和rescue模式修改root密码
一.centos7备份1.su -2.cd /3.tar -zpPcvf backup.tgz --exclude=/sys --exclude=/mnt --exclude=/proc --excl ...
- soapUI系列之—-04 问题解决 获取接口返回报文response报错
1. SoapUI+Groovy中"org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA" 通过So ...
- jquery获取input值的各种情况
jQuery获取多种input值的方法 获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").at ...