luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索
LINK:聪聪与可可
这道题的核心是 想到如何统计答案。
如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做。
两者的位置都在变化 所以需要设出状态 f[i][j]表示第聪聪在i位置 可可在j位置的期望步数。
容易想到转移. i==j->0 j是i的下一步或者下下一步 期望为1.
由于聪聪的走位是固定的 所以 设其走两步的位置为 w 而可可是随机的 所以只需要枚举一下可可的转移即可。
由于状态的无序转移性 所以需要记忆化搜索。非常有趣。
值得一提的是 预处理j的下一步位置 需要使用迪杰斯特拉 这样复杂度是n^2log的。
const int MAXN=1010;
int n,m,len,S,T;
db f[MAXN][MAXN];
int ne[MAXN][MAXN],a[MAXN][MAXN];
int dis[MAXN],vis[MAXN],du[MAXN],mark[MAXN][MAXN];
int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
priority_queue<pii>q;
inline void add(int x,int y)
{
ver[++len]=y;
nex[len]=lin[x];
lin[x]=len;
++du[y];
}
inline db dfs(int x,int y)
{
if(mark[x][y])return f[x][y];
mark[x][y]=1;
if(x==y)return f[x][y]=0;
if(ne[x][y]==y||ne[ne[x][y]][y]==y)return f[x][y]=1;
int w=ne[ne[x][y]][y];
++f[x][y];
go(y)f[x][y]+=1.0/du[y]*dfs(w,tn);
f[x][y]+=1.0/du[y]*dfs(w,y);
return f[x][y];
}
inline void dij(int s)
{
for(int i=1;i<=n;++i)dis[i]=INF;
q.push(mk(0,s));
dis[s]=0;
while(q.size())
{
int x=q.top().S;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=lin[x];i;i=nex[i])
{
int tn=ver[i];
if(dis[tn]>dis[x]+1)
{
dis[tn]=dis[x]+1;
q.push(mk(-dis[tn],tn));
}
}
}
}
int main()
{
freopen("1.in","r",stdin);
get(n);get(m);
get(S);get(T);
rep(1,m,i)
{
int x,y;
get(x);get(y);
add(x,y);add(y,x);
}
rep(1,n,i)
{
dij(i);++du[i];
rep(1,n,j)a[i][j]=dis[j],vis[j]=0;
}
rep(1,n,i)rep(1,n,j)
{
int maxx=INF,p=0;
for(int k=lin[i];k;k=nex[k])
{
int tn=ver[k];
if(a[j][tn]==maxx)p=min(p,tn);
if(a[j][tn]<maxx)maxx=a[j][tn],p=tn;
}
ne[i][j]=p;
}
printf("%.3lf",dfs(S,T));
return 0;
}
luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索的更多相关文章
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索
期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...
- 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索
题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- [CH3803] 扑克牌 (期望DP+记忆化搜索)
[题目链接] [CH3803] 扑克牌 [题面描述] \(54\)张牌,每次随机摸一张,求得到 A张黑桃 B张红桃 C张梅花 D张方块 的期望步数.特别地,大王和小王可以当做任意一种花色,当然,会选择 ...
- bzoj 1415 期望dp + 记忆化搜索
思路:这个题看着感觉不能dp,其实是可以dp的,因为狼每次走两步,兔子每次走一步,每进行一轮以后,狼和兔子的距离 肯定是在接近的,没有相同的状态,dp之前预处理出来,每一步狼该往哪里走. #inclu ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索
题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...
- TSP+期望——lightoj1287记忆化搜索,好题!
感觉是很经典的题 记忆化时因为不好直接通过E判断某个状态是否已经求过,所以再加一个vis打标记即可 /*E[S][u]表示从u出发当前状态是S的期望*/ #include<bits/stdc++ ...
随机推荐
- 如何白嫖微软Azure12个月及避坑指南
Azure是微软提供的一个云服务平台.是全球除了AWS外最大的云服务提供商.Azure是微软除了windows之外另外一个王牌,微软错过了移动端,还好抓住了云服务.这里的Azure是Azure国际不是 ...
- 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰
题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...
- unity-TextAsset
定义: 当把Text files导到unity,将会变成TextAsset. 支持的格式: .txt .html .htm .xml .bytes .json .csv .yaml .fnt 注意 不 ...
- (四)学习了解OrchardCore笔记——将模块的名字添加到程序集的ModuleName
关于如何将模块名添加到程序集的ModuleName说简单吧也简单,说不简单吧也不简单. 简单的原因是代码只有几行,不简单的原因是这些都不是c#,都是MSbuild的代码.这可真难为我了,所以这个地方我 ...
- C# 接口与抽象类的区别? 情景下使用接口,什么情景下使用抽象类?
接口与抽象类的区别: 接口支持多继承:抽象类不能实现多继承. 接口可以用于支持回调:抽象类不能实现回调,因为继承不支持. 接口只包含方法.属性.索引器.事件的签名,但不能定义字段和包含实现的方法:抽象 ...
- Ethical Hacking - GAINING ACCESS(17)
CLIENT SIDE ATTACKS - Backdooring exe' s Download an executable file first. VEIL - FRAMEWORK A backd ...
- 技术小菜比入坑 LinkedList,i 了 i 了
先看再点赞,给自己一点思考的时间,思考过后请毫不犹豫微信搜索[沉默王二],关注这个长发飘飘却靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有技术大佬整理 ...
- idea中maven导入依赖报红的解决办法
使用idea创建maven项目,maven导入依赖报红,从以下几个步骤排查解决问题: 1.首先查看maven的安装和配置有没有问题.那么,要看那些内容呢.maven的安装位置.maven的settin ...
- MongoDB 事务,复制和分片的关系
摘要:本文尝试对Mongo的复制和分布式事务的原理进行描述,在必要的地方,对实现的正确性进行论证,希望能为MongoDB内核爱好者提供一些参考. 1.前言 MongoDB基于wiredTiger提供的 ...
- linux中neovim+tmux安装与配置遇到的问题
Neovim 安装与配置 安装 pip3 install neovim 之前安装过anaconda,默认安装python3和pip3 检查状态 :checkhealth 终端输入'nvim' 进入nv ...