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++ ...
 
随机推荐
- Ants,小小思维题。
			
题目链接 题意: 蚂蚁在一个杆子上行走,每个蚂蚁有开始的位置,且速度都是1,如果蚂蚁“相撞”就会各自回头,以原速度继续行走,走到杆子边上就会掉下去,请问最快都掉下去的时间和最慢都掉下去的时间. 题目分 ...
 - python中pymysql  executemany 批量插入数据
			
import pymysqlimport timedb = pymysql.connect("IP","username","password&quo ...
 - Spring Boot 2 实战:常用读取配置的方式
			
1. 前言 在Spring Boot项目中我们经常需要读取application.yml配置文件的自定义配置,今天就来罗列一下从yaml读取配置文件的一些常用手段和方法. 2. 使用@Value注解 ...
 - Spring-boot 启动报错 调试小技巧
			
描述: 我们在启动spring-boot,spring-cloud 项目时,是不是经常 遇到报错,但是在控制台 没有能找到 具体 报错信息,只是 提示,启动失败,缺乏具体的报错信息,这样就很不方便我们 ...
 - java 数据结构(一):java常用类 一 String类
			
java.lang.String类的使用1.概述String:字符串,使用一对""引起来表示.1.String声明为final的,不可被继承2.String实现了Serializa ...
 - java 基本语法(一) 关键字与标识符
			
1.java关键字的使用定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所字母都为小写具体哪些关键字: 2.保留字:现Java版本尚未使用,但以后版本可能会作为关键字使用 ...
 - Django框架10 /sweetalert插件、django事务和锁、中间件、django请求生命周期
			
Django框架10 /sweetalert插件.django事务和锁.中间件.django请求生命周期 目录 Django框架10 /sweetalert插件.django事务和锁.中间件.djan ...
 - Python Hacking Tools - Password Sniffing
			
Password Sniffing with Scapy 1. Download and install the Scapy first. pip install scapy https://scap ...
 - Spring声明式事务快速上手
			
1.什么是事务 首先我们要知道什么是事务.知其然,才能知其所以然. 事务(Transaction)是一个业务,是一个不可分割的逻辑工作单元,基于事务可以更好的保证业务的正确性. 这么说可能有点难以理解 ...
 - 机房vscode使用方法
			
问题 众所周知,机房中的电脑有一个win7系统,(非常的好,摆脱linux了),同时win7上有一个 vscode ,更好了. 但是!vscode 由于老师不允许联网,导致插件无法安装,更为恶心的事, ...