BZOJ 3640 JC的小苹果(逆矩阵)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3640
题意:给出一个无向图,从1走到n。开始是血量H,从u到达v时血量减少a[v]。每次走每条路径的概率相等。求走到n且血量大于0的概率。
思路:设f[h][u]表示到达u血量为h的概率。由于有的点到达时不掉血,这个不好弄。列出方程组,求出每个不掉血的点由哪些点到达以及他们的系数。比如x,y,z可到达r,r点不掉血,那么f[h][r]=p1*f[h][x]+p2*f[h][y]+p3*f[h][z]。这个p1、p2、p3就是r的系数。求逆矩阵可以得到。
const int N=155;
int n,m,K,B[N],A[N];
double x[N][N],num[N][N],f[11111][N];
int a[N][N];
void Gauss()
{
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++) if(fabs(x[j][i])>1e-10) break;
if(j!=i)
{
for(k=1;k<=n;k++)
{
swap(x[i][k],x[j][k]);
swap(num[i][k],num[j][k]);
}
}
double tmp=x[i][i];
for(k=1;k<=n;k++) x[i][k]/=tmp,num[i][k]/=tmp;
for(j=1;j<=n;j++) if(j!=i)
{
tmp=x[j][i];
for(k=1;k<=n;k++) x[j][k]-=x[i][k]*tmp,num[j][k]-=num[i][k]*tmp;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
int i,j,k;
for(i=1;i<=n;i++) scanf("%d",&A[i]);
for(i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
B[x]++;
a[x][y]++;
if(x!=y)
{
B[y]++;
a[y][x]++;
}
}
for(i=1;i<n;i++) for(j=1;j<=n;j++) if(!A[j]) x[j][i]-=1.0*a[i][j]/B[i];
for(i=1;i<=n;i++) x[i][i]+=1,num[i][i]=1;
Gauss();
f[K][1]=1;
double ans=0;
for(k=K;k>=1;k--)
{
for(i=1;i<n;i++) for(j=1;j<=n;j++) if(A[j]&&k+A[j]<=K&&B[i])
{
f[k][j]+=f[k+A[j]][i]*a[i][j]/(B[i]);
}
double cs[N];
for(i=1;i<=n;i++) cs[i]=f[k][i];
for(i=1;i<=n;i++) if(!A[i])
{
f[k][i]=0;
for(j=1;j<=n;j++) if(A[j]||j==1)f[k][i]+=num[i][j]*cs[j];
}
ans+=f[k][n];
}
printf("%.8lf\n",ans);
return 0;
}
BZOJ 3640 JC的小苹果(逆矩阵)的更多相关文章
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- BZOJ 3640: JC的小苹果
3640: JC的小苹果 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 425 Solved: 155[Submit][Status][Discus ...
- ●BZOJ 3640 JC的小苹果
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3640题解: 期望dp,高斯消元 设dp[i][h]在i位置且血量为h这个状态的期望经过次数. ...
- 3640: JC的小苹果 - BZOJ
让我们继续JC和DZY的故事.“你是我的小丫小苹果,怎么爱你都不嫌多!”“点亮我生命的火,火火火火火!”话说JC历经艰辛来到了城市B,但是由于他的疏忽DZY偷走了他的小苹果!没有小苹果怎么听歌!他发现 ...
- 【BZOJ】3640: JC的小苹果
题解 我们考虑列出期望方程组,\(dp[i][j]\)表示在第\(i\)个点血量为\(j\)的时候到达\(N\)点的概率,所有的\(dp[N][j]\)都是1,所有\(j < 0\)都是0 答案 ...
- JC的小苹果 逆矩阵
这题主要有两种做法:1种是用逆矩阵,转移时无须高斯消元.2是将常数项回代.这里主要介绍第一种. 首先题里少个条件:点权非负.设f [ i ][ j ]表示hp为i时,到达j点的期望次数. 那么若点权为 ...
- 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)
JC的小苹果 Submit: 432 Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- bzoj千题计划291:bzoj3640: JC的小苹果
http://www.lydsy.com/JudgeOnline/problem.php?id=3640 dp[i][j] 表示i滴血到达j的概率 dp[i][j] = Σ dp[i+val[i]][ ...
随机推荐
- springmvc处理ajax请求
1.controller将数据封装成json格式返回页面 @RequestMapping("/dataList") public void datalist(CsoftCunsto ...
- 夺命雷公狗---Thinkphp----3之后台搭建
我们这里来搭建我们网站所需要用到的后台: 我们直接打开WEB目录,然后直接赋值Home文件粘贴并改名为Admin,效果如下所示: 然后修改他的控制器: 代码修改成如下所示: <?php name ...
- libsvm
代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量 ...
- [MacOS] xcrun: error: active developer path ("/Volumes/Xcode/Xcode6-Beta.app/Contents/Developer") does not exist, use xcode-select to change
When using MacOS with xcode6-beta, i always meet these error: xcrun: error: active developer path (& ...
- 【兄弟连ThinkPHP】1、介绍和安装
琢磨了好几天的ThinkPHP了,兄弟连的视频真心不错,下面是记得一些要点,只做备忘,有兴趣的朋友请去百度兄弟连. ## ThinkPHP 3 介绍及安装#讲师:赵桐正微博:http://weibo. ...
- location.reload()加载时有弹出框
解决办法: 1.试试 window.location.href=window.location.href 2.当前页有被post数据的时候reload就会提示刷新 可以尝试重新定向页面地址 3.rel ...
- Openstack的dashboard开发之【浏览器兼容性】
完全不支持浏览器: ie9(含)以下ie低版本浏览器及使用ie低版本浏览器的内核的扩展浏览器,如360安全浏览器(内核ie6) 原因:不支持vnc(需要浏览器支持才有vnc功能),jquery也不在支 ...
- C++线性方程求解
介绍 程序SolveLinearEquations解决联立方程.该方案需要一个文本文件,其中包含输入和输出方程解决.这个项目是几年前我写在C#中http://www.codeproject.com/A ...
- scrapy学习记录
scrapy是一个用来爬取一个或多个网站的数据,提取数据的应用框架.下载过程非常复杂,而且会遇到各种问题.所以写个博客来记录下. 安装好python2.7之后,就可以开始.安装scrapy前还需要安装 ...
- Loadrunner 接口测试的两种方法
其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用Lo ...