BZOJ3640 : JC的小苹果
设$f[i][j]$表示$hp$为$i$,在$j$点的概率,$d[i]$表示$i$的度数,$w[i]$表示经过$i$点要扣掉的血量。
对于$j$到$k$这条边,$f[i-w[k]][k]+=\frac{f[i][j]}{d[j]}$。
若$w[k]>0$,则直接将贡献加给$f[i-w[k]][k]$,否则加入转移矩阵$G$。
对于当前层,有$G\times f'[i]=f[i]$,即$f'[i]=G^{-1}\times f[i]$,对$G$求出逆矩阵即可。
时间复杂度$O(n^3+n^2hp)$。
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=152,M=10010;
int n,m,hp,i,j,k,w[N],g[N],v[M],nxt[M],ed;
double t,a[N][N],b[N][N],d[N],f[M][N],c[N],ans;
void add(int x,int y){d[x]+=1;v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
int main(){
scanf("%d%d%d",&n,&m,&hp);
for(i=1;i<=n;i++)scanf("%d",&w[i]);
while(m--){
scanf("%d%d",&i,&j),add(i,j);
if(i!=j)add(j,i);
}
for(i=1;i<=n;i++)d[i]=1.0/d[i];
for(i=1;i<=n;i++){
if(i<n)for(j=g[i];j;j=nxt[j])if(!w[v[j]])a[v[j]][i]-=d[i];
a[i][i]+=1,b[i][i]=1;
}
for(i=1;i<=n;i++){
for(k=i,j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
if(k!=i)for(j=1;j<=n;j++)swap(a[i][j],a[k][j]),swap(b[i][j],b[k][j]);
for(j=i+1;j<=n;j++)for(t=a[j][i]/a[i][i],k=1;k<=n;k++)a[j][k]-=a[i][k]*t,b[j][k]-=b[i][k]*t;
}
for(i=n;i;i--){
for(j=n;j>i;j--)for(t=a[i][j],k=1;k<=n;k++)a[i][k]-=a[j][k]*t,b[i][k]-=b[j][k]*t;
for(t=a[i][i],j=1;j<=n;j++)a[i][j]/=t,b[i][j]/=t;
}
f[hp][1]=1;
for(i=hp;i;i--){
for(j=1;j<=n;j++)for(c[j]=0,k=1;k<=n;k++)c[j]+=b[j][k]*f[i][k];
ans+=c[n],c[n]=0;
for(j=1;j<n;j++)for(k=g[j];k;k=nxt[k])if(w[v[k]]&&i>w[v[k]])f[i-w[v[k]]][v[k]]+=c[j]*d[j];
}
return printf("%.8f",ans),0;
}
BZOJ3640 : JC的小苹果的更多相关文章
- 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]][ ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)
JC的小苹果 Submit: 432 Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...
- BZOJ 3640: JC的小苹果
3640: JC的小苹果 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 425 Solved: 155[Submit][Status][Discus ...
- 3640: JC的小苹果 - BZOJ
让我们继续JC和DZY的故事.“你是我的小丫小苹果,怎么爱你都不嫌多!”“点亮我生命的火,火火火火火!”话说JC历经艰辛来到了城市B,但是由于他的疏忽DZY偷走了他的小苹果!没有小苹果怎么听歌!他发现 ...
- ●BZOJ 3640 JC的小苹果
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3640题解: 期望dp,高斯消元 设dp[i][h]在i位置且血量为h这个状态的期望经过次数. ...
- BZOJ 3640 JC的小苹果(逆矩阵)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3640 题意:给出一个无向图,从1走到n.开始是血量H,从u到达v时血量减少a[v] ...
- 【BZOJ】3640: JC的小苹果
题解 我们考虑列出期望方程组,\(dp[i][j]\)表示在第\(i\)个点血量为\(j\)的时候到达\(N\)点的概率,所有的\(dp[N][j]\)都是1,所有\(j < 0\)都是0 答案 ...
随机推荐
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- Kruskal vs Borůvka
做了个对比.Borůvka算法对于稠密图效果特别好.这两个都是求生成森林的算法.Prim+heap+tarjan过于难写不写了. V=200,E=1000 Kruskal method 4875048 ...
- C/C++程序终止时执行的函数——atexit()函数详解
很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束.在程序的某个地方用exit()结束程序.用户通过Ctrl+C或Ctrl+break操作 ...
- linux下统计当前目录下文件个数
ls | wc -l 转自:http://bbs.csdn.net/topics/60387132
- SSHPASS支持从命令行输入密码
参考:http://www.2cto.com/os/201307/227911.html 手动下载地址:http://sourceforge.net/projects/sshpass/ 安装示例: w ...
- Apple Swift中英文开发资源集锦[apple swift resources]
找到的一些Apple Swift中英文资源原文链接,希望对大家有所帮助.欢迎大家补充,原始资源链接最好! The Swift Programming Language https://develope ...
- 如何破解excel宏的密码
http://zhidao.baidu.com/question/140107193.html 最近下载了一个excel模板,使用excel宏编的,但实际需要需更改一下,但是他设置了工作表密码保护,谁 ...
- canvas API ,通俗的canvas基础知识(三)
全文说到了三角形,圆形等相关图形的画法,不熟悉的同学可以出门右转,先看看前文,接下来继续我们的图形——曲线. 学过数学,或者是比较了解js 的同学都知道贝塞尔曲线,当然,在数学里面,这是一门高深的学问 ...
- web iphone css 兼容性
解决IPHONE网页兼容(部分字号变大): body{-webkit-text-size-adjust:none;}
- DLL工程没有生成对应的lib文件
要至少导出一个函数/变量才能产生lib 也就是说得用到__declspec(dllexport)