http://www.lydsy.com/JudgeOnline/problem.php?id=3640

dp[i][j] 表示i滴血到达j的概率

dp[i][j] = Σ dp[i+val[i]][k]/d[k]

将第一维看做层次

那么同层之间需要高斯消元解决

对每一层都做一次是 hp*n^3

但是不同层次之间只有常数列是不一样的

记录第一次将系数矩阵消成上三角矩阵的过程

每次修改系数列,只模拟回代的过程

hp* n^2

#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; #define N 151
#define M 5001
#define K 10001 int val[N]; int front[N],to[M<<],nxt[M<<],tot;
int d[N]; double a[N+][N+],b[N+];
struct node
{
int i;
double t;
}e[N][N];
int cnt[N]; double dp[K][N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int u,int v)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
} void pre(int n)
{
double t;
for(int i=;i<=n;++i)
{
for(int j=i+;j<=n;++j)
{
t=a[j][i]/a[i][i];
for(int k=i;k<=n;++k) a[j][k]-=a[i][k]*t;
e[j][++cnt[j]].i=i;
e[j][cnt[j]].t=t;
}
}
} void gauss(int n,int m)
{
for(int i=n;i>=;--i)
{
for(int j=i+;j<=n;++j) b[i]-=a[i][j]*dp[m][j];
dp[m][i]=b[i]/a[i][i];
}
} int main()
{
int n,m,hp;
read(n); read(m); read(hp);
for(int i=;i<=n;++i) read(val[i]);
int u,v;
for(int i=;i<=m;++i)
{
read(u); read(v);
add(u,v); d[u]++;
if(u!=v) add(v,u),d[v]++;
}
for(int i=;i<=n;++i)
{
a[i][i]=;
if(val[i]) continue;
for(int j=front[i];j;j=nxt[j])
if(to[j]!=n) a[i][to[j]]-=1.0/d[to[j]];
}
pre(n);
for(int i=hp;i;--i)
{
memset(b,,sizeof(b));
if(i==hp) b[]=;
for(int j=;j<=n;++j)
if(val[j] && i+val[j]<=hp)
for(int k=front[j];k;k=nxt[k])
if(to[k]!=n) b[j]+=dp[i+val[j]][to[k]]/d[to[k]];
for(int j=;j<=n;++j)
for(int k=;k<=cnt[j];++k)
b[j]-=b[e[j][k].i]*e[j][k].t;
gauss(n,i);
}
double ans=;
for(int i=;i<=hp;++i) ans+=dp[i][n];
printf("%.8lf",ans);
}

bzoj千题计划291:bzoj3640: JC的小苹果的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  3. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  4. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  5. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  6. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  7. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  8. bzoj千题计划279:bzoj4591: [Shoi2015]超能粒子炮·改

    http://www.lydsy.com/JudgeOnline/problem.php?id=4591 最后的式子合并同类项 #include<cstdio> #include<i ...

  9. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

随机推荐

  1. Java关键字 Finally执行与break, continue, return等关键字的关系

    长文短总结: 在程序没有在执行到finally之前异常退出的情况下,finally是一定执行的,即在finally之前的return语句将在finally执行之后执行. finally总是在控制转移语 ...

  2. Github相册博客搭建

    前一段时间我看见一个问答,大概意思就是程序员都是怎么用自己的专业技能逗女朋友或表白的. 看了很多,有写定时关机脚本恶搞的,也有简单写个html展示的,其中最著名的就是几年前有个人写了个网页记录他们在一 ...

  3. 博客目录 Blog directory

    Linux 学习笔记 Linux/Mac 挂载远程服务器目录到本地 --Mount remote server directory to local PC 远程连接服务器端Jupyter Notebo ...

  4. PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)

    如题,大水题...贴个代码完事,就这么任性~~ #include <iostream> #include <cstdio> #include <algorithm> ...

  5. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  6. 重温jsp③

    Jsp详细   九大内置对象 Out jsp的输出流,用来向客户端响应 page 当前jsp对象!他的引用类型是object,即真身中有如下代码:object page=this: Session h ...

  7. 剑指offer:从上往下打印二叉树

    题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路: 实际就是二叉树的中序遍历问题.之前在leetcode刷过类似题目. 利用队列完成即可. 代码: /* struct Tr ...

  8. 第二个Sprint冲刺第 八天(燃尽图)

    因为今天停电了,所以我们也休息一天!

  9. node.js处理url常用方法

    处理非阻塞I/O /* *回调函数的方法 异步 */ /* function f(cb){ fs.readFile('./4',(err,data)=>{ cb(data.toString()) ...

  10. Fire Net HDU - 1045(二分匹配)

    把每一列中相邻的 .  缩为一个点 作为二分图的左边 把每一行中相邻的  .  缩为一个点 作为二分图的右边 然后求最大匹配即可 这题用匈牙利足够了...然而..我用了hk...有点大材小用的感觉// ...