3640: JC的小苹果 - BZOJ
让我们继续JC和DZY的故事。
“你是我的小丫小苹果,怎么爱你都不嫌多!”
“点亮我生命的火,火火火火火!”
话说JC历经艰辛来到了城市B,但是由于他的疏忽DZY偷走了他的小苹果!没有小苹果怎么听歌!他发现邪恶的DZY把他的小苹果藏在了一个迷宫里。JC在经历了之前的战斗后他还剩下hp点血。开始JC在1号点,他的小苹果在N号点。DZY在一些点里放了怪兽。当JC每次遇到位置在i的怪兽时他会损失Ai点血。当JC的血小于等于0时他就会被自动弹出迷宫并且再也无法进入。
但是JC迷路了,他每次只能从当前所在点出发等概率的选择一条道路走。所有道路都是双向的,一共有m条,怪兽无法被杀死。现在JC想知道他找到他的小苹果的概率。
输入格式:
第一行三个整数表示n,m,hp。接下来一行整数,第i个表示jc到第i个点要损失的血量。保证第1个和n个数为0。接下来m行每行两个整数a,b表示ab间有一条无向边。
输出格式:
仅一行,表示JC找到他的小苹果的期望概率,保留八位小数。
样例输入:
3 3 2 0 1 0 1 2 1 3 2 3
样例输出:
0.87500000
数据范围:
对于10%的数据n=5,hp=1
对于30%的数据n<=20,hp<=5
对于60%的数据n<=50,hp<=10000
对于另外10%的数据 所有点权均为正
对于100%的数据 2<=n<=150,hp<=10000,m<=5000,保证图联通,点权非负。
时间限制:
4s
空间限制:
256M
囧,一开始不知道点权非负,是后来加上去的,问别人才知道
copy题解(懒得写了,题解讲得比我好多了):
【算法一】
爆搜(虽然我也不知道怎么搜) 期望的分10
【算法二】
把所有点按照hp拆点,然后高斯消元,复杂度O(hp^3*n^3)。期望的分30
【算法三】
我们发现对于hp来说层与层之间是DAG,所以每一层做高斯消元。然后层与层之间递推就可以了。复杂度O(hp*n^3),期望的分60
【算法四】
大致同算法三,但是我们发现每一次高斯消元的矩阵除了常数项都是相同的,所以可以先进行一次高斯消元预处理,其它只要做带入的工作即可。复杂度O(hp*n^2),期望的分100
囧,自环环太无语,只能加一条,不能加两次
const
maxn=;
maxm=;
maxhp=;
eps=1e-9;
var
x,y:array[..maxn,..maxn]of double;
f:array[..maxhp,..maxn]of double;
ff:array[..maxn]of double;
a,d,first:array[..maxn]of longint;
last,next:array[..maxm*]of longint;
n,m,hp,tot:longint;
ans:double; procedure insert(x,y:longint);
begin
if x=n then exit;
inc(tot);
last[tot]:=y;
next[tot]:=first[x];
first[x]:=tot;
inc(d[x]);
end; procedure swap(var x,y:double);
var
t:double;
begin
t:=x;x:=y;y:=t;
end; procedure work;
var
i,j,k:longint;
s:double;
begin
for i:= to n do
begin
j:=first[i];
while j<> do
begin
if a[last[j]]= then x[last[j],i]:=x[last[j],i]-/d[i];
j:=next[j];
end;
end;
for i:= to n do x[i,i]:=x[i,i]+;
for i:= to n do y[i,i]:=;
for i:= to n- do
begin
for j:=i to n do
if abs(x[j,i])>eps then break;
for k:= to n do swap(x[i,k],x[j,k]);
for k:= to n do swap(y[i,k],y[j,k]);
for j:=i+ to n do
if abs(x[j,i])>eps then
begin
s:=x[j,i]/x[i,i];
for k:= to n do x[j,k]:=x[j,k]-x[i,k]*s;
for k:= to n do y[j,k]:=y[j,k]-y[i,k]*s;
end;
end;
for i:=n downto do
for j:= to i- do
if abs(x[j,i])>eps then
begin
s:=x[j,i]/x[i,i];
for k:= to n do x[j,k]:=x[j,k]-x[i,k]*s;
for k:= to n do y[j,k]:=y[j,k]-y[i,k]*s;
end;
for i:= to n do
for j:= to n do
y[i,j]:=y[i,j]/x[i,i];
end; procedure main;
var
i,j,k,u,v:longint;
begin
read(n,m,hp);
for i:= to n do read(a[i]);
for i:= to m do
begin
read(u,v);
if u<>v then insert(u,v);
insert(v,u);
end;
work;
f[hp,]:=;
for i:=hp downto do
begin
ff:=f[i];
ans:=ans+ff[n];ff[n]:=;
for j:= to n do f[i,j]:=;
for j:= to n do
for k:= to n do
f[i,j]:=f[i,j]+ff[k]*y[j,k];
ans:=ans+f[i,n];f[i,n]:=;
for j:= to n do
begin
k:=first[j];
while k<> do
begin
if (i-a[last[k]]>) and (a[last[k]]>) then
f[i-a[last[k]],last[k]]:=f[i-a[last[k]],last[k]]+f[i,j]/d[j];
k:=next[k];
end;
end;
end;
writeln(ans::);
end; begin
main;
end.
更新:bzoj上有了题目,但是pascal一直被卡,想了n久,无奈交了std(C++的),突然又想到一个优化,15s+卡过了(好辛酸啊)
3640: JC的小苹果 - BZOJ的更多相关文章
- 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:808/JudgeOnline/problem.php?id=3640 题意:给出一个无向图,从1走到n.开始是血量H,从u到达v时血量减少a[v] ...
- ●BZOJ 3640 JC的小苹果
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3640题解: 期望dp,高斯消元 设dp[i][h]在i位置且血量为h这个状态的期望经过次数. ...
- 【BZOJ】3640: JC的小苹果
题解 我们考虑列出期望方程组,\(dp[i][j]\)表示在第\(i\)个点血量为\(j\)的时候到达\(N\)点的概率,所有的\(dp[N][j]\)都是1,所有\(j < 0\)都是0 答案 ...
- 【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]][ ...
- BZOJ3640 : JC的小苹果
设$f[i][j]$表示$hp$为$i$,在$j$点的概率,$d[i]$表示$i$的度数,$w[i]$表示经过$i$点要扣掉的血量. 对于$j$到$k$这条边,$f[i-w[k]][k]+=\frac ...
随机推荐
- hexo资源--theme等
Hexo (https://github.com/hexojs/hexo) [3]hexo你的博客(http://ibruce.info/2013/11/22/hexo-your-blog/) [4] ...
- mac下apache的多站点配置
以下操作均建立在 已经配置好了php环境 从网上搜索了下,后来自己配置了下还是比较简单的! 我的环境目录是在/Library/webServer/Documents 测试的时候可以直接在这里建立 ...
- select--from--where--group by--having--order by 依次顺序
1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--group by--having--order by 其中select和from是必须的,其他关键词 ...
- maxlength属性在textarea里奇怪的表现
HTML5给表单带来了很多改变,比如今天要说的maxlength,这个属性可以限制输入框输入的最大字字符数,更方便的是对于粘贴的内容也能够根据字符数自动截断. 最近就接到这要一个需求,限制用户最多输入 ...
- Silverlight引用WebService时取消对ServiceReferences.ClientConfig文件的依赖
做过Silverlight项目的朋友都知道一般来说我们在Silverlight项目中都需要引用WebService或是WCF,引用的方式是在Visual Studio窗口中通过“添加服务引用”来添加引 ...
- Apache HTTP Server安装教程
Apache HTTP Server安装教程 Apache HTTP Server的官方网站是:http://httpd.apache.org/,可以从中下载最新版本的Apache HTTP Serv ...
- UILabel滚动字幕的实现
经常需要在应用中显示一段很长的文字,比如天气或者广告等,这时候使用滚动字幕的方式比较方便. 参考文献: [1] YouXianMing, 使用UILabel实现滚动字幕移动效果, 博客园 [2] ht ...
- JavaScript 内部对象
欢迎访问我的个人博客:http://blog.cdswyda.com/ 原文文地址:JavaScript 内部对象
- Assembly(程序集) 反射和缓存
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 正则PerlRegEx实现的批量替换指定文件中的标签
示例: 一个朋友需要而编写的标签升级更新. 速度超快,1w个文件大概4,5秒,本想加个多线程显示进度,后来想想算了 主要代码: reg.RegEx := '<' + Edit_regular1. ...