JC的小苹果 逆矩阵
这题主要有两种做法:1种是用逆矩阵,转移时无须高斯消元。2是将常数项回代。这里主要介绍第一种。
首先题里少个条件:点权非负。设f [ i ][ j ]表示hp为i时,到达j点的期望次数。
那么若点权为正,直接转移:f [ i + w[ j ] ][ i ]对f [ i ][ j ]的贡献为f[ i+w[j] ]/d[ i ](d[i]表示点i的出度)
若点权为0,则需高斯消元,单次消元复杂度(n^3)显然会炸,我们考虑优化。、
对于高斯消元,有一个结论:系数矩阵*答案矩阵=常数矩阵(用方程组的定义来理解,挺简单的,虽然我想了好久)
将系数矩阵换到右边,就变成了 答案矩阵=常数矩阵×系数矩阵的逆
对于本题而言,系数矩阵是不变的,变化的只有常数矩阵,而常数矩阵O(m)即可处理出,因此我们可以预处理出系数矩阵的逆矩阵,之后每次只需将逆矩阵与常数矩阵相乘,而常数矩阵为一个列向量,每次乘法复杂度O(n^2),总复杂度O((n^2+m)hp+n^3)。
对于矩阵求逆只需将原矩阵高斯消元,然后不管什么操作都对一个单位矩阵做同等变换,单位矩阵在消完元后也就变成了原矩阵的逆矩阵。
#include<bits/stdc++.h>
#define eps 1e-8
using namespace std;
int n,m,hp,a[],tot,to[],fi[],ne[],du[];
double c[][],b[][],d[][],f[][],dp[],ans;
inline void add(int x,int y)
{
ne[++tot]=fi[x];
fi[x]=tot;
to[tot]=y;
}
int main()
{
scanf("%d%d%d",&n,&m,&hp);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y),du[x]++;
if(x!=y)
add(y,x),du[y]++;
}
for(int i=;i<n;i++)
for(int j=fi[i];j;j=ne[j])
{
int y=to[j];
if(!a[y])
{
c[y][i]+=1.0/du[i];
}
}
for(int i=;i<=n;i++)
b[i][i]=,c[i][i]--;
for(int i=;i<=n;i++)
{
int k=i;
for(int j=i+;j<=n;j++)
if(fabs(c[j][i])>fabs(c[k][i]))
k=j;
for(int j=;j<=n;j++)swap(c[i][j],c[k][j]),swap(b[i][j],b[k][j]);
if(fabs(c[i][i])<eps)continue;
double r=c[i][i];
for(int j=;j<=n;j++)
c[i][j]/=r,b[i][j]/=r;
for(int j=;j<=n;j++)
{
if(i==j)continue;
double r=c[j][i];
for(int k=;k<=n;k++)
c[j][k]-=r*c[i][k],b[j][k]-=r*b[i][k];
}
}
f[hp][]=-;
for(int i=hp;i;i--)
{
for(int j=;j<=n;j++)
for(int k=;k<=n;k++)
dp[j]+=f[i][k]*b[j][k];
ans+=dp[n];
for(int j=;j<n;j++)
{
for(int k=fi[j];k;k=ne[k])
{
int y=to[k];
if(a[y]&&i>a[y])
f[i-a[y]][y]-=1.0*dp[j]/du[j];
}
dp[j]=;
}
dp[n]=;
}
printf("%.8lf",ans);
return ;
}
JC的小苹果 逆矩阵的更多相关文章
- 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的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- 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:808/JudgeOnline/problem.php?id=3640 题意:给出一个无向图,从1走到n.开始是血量H,从u到达v时血量减少a[v] ...
- 3640: JC的小苹果 - BZOJ
让我们继续JC和DZY的故事.“你是我的小丫小苹果,怎么爱你都不嫌多!”“点亮我生命的火,火火火火火!”话说JC历经艰辛来到了城市B,但是由于他的疏忽DZY偷走了他的小苹果!没有小苹果怎么听歌!他发现 ...
- BZOJ3640 : JC的小苹果
设$f[i][j]$表示$hp$为$i$,在$j$点的概率,$d[i]$表示$i$的度数,$w[i]$表示经过$i$点要扣掉的血量. 对于$j$到$k$这条边,$f[i-w[k]][k]+=\frac ...
- 【BZOJ】3640: JC的小苹果
题解 我们考虑列出期望方程组,\(dp[i][j]\)表示在第\(i\)个点血量为\(j\)的时候到达\(N\)点的概率,所有的\(dp[N][j]\)都是1,所有\(j < 0\)都是0 答案 ...
- ●BZOJ 3640 JC的小苹果
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3640题解: 期望dp,高斯消元 设dp[i][h]在i位置且血量为h这个状态的期望经过次数. ...
随机推荐
- Scala 学习笔记之implicit
implicit 分为隐式转换和隐式参数,下面例子展现了两种方式的用法: package com.citi.scala class Man(val name: String) { def talkWi ...
- linux无法安装应用
需安装flex 和bison 一般需要更新软件源 root权限 下 apt-get update apt-get upgrade 如果出现以下问题,先查看网络是否畅通: ping 192.168.0. ...
- SpringBoot注入Mapper失败
SpringBoot注入Mapper失败,可能是因为没有加扫描Mapper层的注解 方式一:在所有mapper接口使用@Mapper注解 @Mapper public interface UserMa ...
- spring5 源码深度解析----- 事务增强器(100%理解事务)
上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,实际上也就是用了AOP那一套,也讲解了Advisor,pointcut验 ...
- Windows中0环与3环通信(常规方式)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 一.知识点讲解 1. 设备对象 我们在开发窗口程序的时候,消息被封 ...
- 移动端的<meta>标签
<head> <meta charset="UTF-8" /> <!-- 页面关键词 --> <meta name="keywo ...
- TCP/IP协议介绍
一.什么是TCP/IP TCP/IP是一类协议系统,它是用于网络通信的一套协议集合 TCP/IP是供已连接因特网的计算机进行通信的通信协议 TCP/IP指传输控制协议/网际协议 TCP/IP定义了电子 ...
- 从零开始入门 K8s | Kubernetes 网络概念及策略控制
作者 | 阿里巴巴高级技术专家 叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...
- Python玩转人工智能最火框架 TensorFlow应用实践 ☝☝☝
Python玩转人工智能最火框架 TensorFlow应用实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 全民人工智能时代,不甘心只做一个旁观者,那就现在 ...
- 爬虫2:html页面+beautifulsoap模块+post方式+demo
爬取html页面,有时需要设置参数post方式请求,生成json,保存文件中. 1)引入模块 import requests from bs4 import BeautifulSoup url_ = ...