期望dp水题~

你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环)

然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数.

用记忆化搜索转移就行了.

code:

#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#define N 1004
#define LL long long
#define pb push_back
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m;
queue<int>q;
vector<int>G[N];
double dp[N][N];
int nxt[N][N],dis[N][N],vis[N],d[N],vised[N][N];
double f(int a,int b)
{
if(a==b) return 0.0;
if(nxt[a][b]==b) return 1.00;
if(nxt[nxt[a][b]][b]==b) return 1.00;
if(vised[a][b]) return dp[a][b];
vised[a][b]=1;
dp[a][b]=0.000;
for(int i=0;i<G[b].size();++i)
{
int v=G[b][i];
dp[a][b]+=(f(nxt[nxt[a][b]][b], v)+1.00)/(double)G[b].size();
}
return dp[a][b];
}
int main()
{
int i,j,A,B;
scanf("%d%d%d%d",&n,&m,&A,&B);
for(i=1;i<=m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
G[a].pb(b),G[b].pb(a);
}
for(i=1;i<=n;++i)
{
memset(vis,0,sizeof(vis));
d[i]=0;
q.push(i);
vis[i]=1;
while(!q.empty())
{
int u=q.front(); q.pop();
for(j=0;j<G[u].size();++j)
{
int v=G[u][j];
if(!vis[v])
{
vis[v]=1;
d[v]=d[u]+1;
q.push(v);
}
}
}
nxt[i][i]=i;
for(j=1;j<=n;++j)
{
if(j==i) continue;
int mx=0,k,v;
for(k=0;k<G[j].size();++k)
{
v=G[j][k];
if(d[j]==d[v]+1&&(v<mx||!mx)) mx=v;
}
nxt[j][i]=mx;
}
}
for(i=1;i<=n;++i) G[i].pb(i);
printf("%.3f\n",f(A,B));
return 0;
}

  

bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索的更多相关文章

  1. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  2. luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索

    LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...

  3. 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索

    题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...

  4. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】

    题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  5. [CH3803] 扑克牌 (期望DP+记忆化搜索)

    [题目链接] [CH3803] 扑克牌 [题面描述] \(54\)张牌,每次随机摸一张,求得到 A张黑桃 B张红桃 C张梅花 D张方块 的期望步数.特别地,大王和小王可以当做任意一种花色,当然,会选择 ...

  6. bzoj 1415 期望dp + 记忆化搜索

    思路:这个题看着感觉不能dp,其实是可以dp的,因为狼每次走两步,兔子每次走一步,每进行一轮以后,狼和兔子的距离 肯定是在接近的,没有相同的状态,dp之前预处理出来,每一步狼该往哪里走. #inclu ...

  7. 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1640  Solved: 962 Description I ...

  8. TSP+期望——lightoj1287记忆化搜索,好题!

    感觉是很经典的题 记忆化时因为不好直接通过E判断某个状态是否已经求过,所以再加一个vis打标记即可 /*E[S][u]表示从u出发当前状态是S的期望*/ #include<bits/stdc++ ...

  9. LightOJ - 1287 Where to Run (期望dp+记忆化)

    题面: Last night you robbed a bank but couldn't escape and when you just got outside today, the police ...

随机推荐

  1. 关于#define 的宏替换的一些问题

    #define PI 3.14; int main() { , s = ; s = r * r * PI; s = PI * r * r; // s = 3.14; * r * r; printf(& ...

  2. S04_CH02_工程移植ubuntu并一键制作启动盘

    S04_CH02_工程移植ubuntu并一键制作启动盘 2.1概述 2.2搭建硬件系统 本章硬件工程还是使用<S04_CH01_搭建工程移植LINUX/测试EMMC/VGA>所搭建的VIV ...

  3. oracle给用户授权存储过程

    https://www.jianshu.com/p/fab356d68ae2 grant connect,resource to xinomonitor; 发现不能进行断点调试,然后授如下权限 gra ...

  4. Java架构笔记:用JWT对SpringCloud进行认证和鉴权

    写在前面 喜欢的朋友可以关注下专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦. image.png JWT(JSON WEB TOKEN)是基于RF ...

  5. SQL case when 遇到null值

    case  when f.FPH is  NULL then a.HSJE else f.KPHSJE  end    yes case f.FPH  when   NULL then a.HSJE ...

  6. MySQL LAST_INSERT_ID()用法

    last_insert_id()函数是适用于id为自动生成的表 下面是插入表数据时last_insert_id()函数的两种用法: 表结构: 此表使用last_insert_id()函数的字段为par ...

  7. 基于【 SpringBoot】一 || QQ授权流程

    一.准备工作 1.qq开放平台应用申请,获取APP ID和APP Key 2.qq开放平台配置回调地址 二.服务器端生成授权链接 1.请求地址 https://graph.qq.com/oauth2. ...

  8. 微信小程序错误readFile:fail parameter error: parameter.filePath should be String instead of Undefined;

    我是在使用camera组件时遇到的该问题 原因是未保存文件路径(微信使用摄像头拍照后会把图片保存在一个临时的路径,所以你需要自己定义一个变量来存这个路径,以备下次使用该变量去访问文件) 所以加上你需要 ...

  9. TCP与UDP协议必知必会

    TCP协议 一个工作在传输层的传输控制协议,面向连接.可靠的流式协议,HTTP协议建立在TCP基础上.每个TCP报文,实际在网络层进行封装成IP数据报,会进行IP分片(受限于MTU). 头部(20字节 ...

  10. linux下的缓存机制buffer、cache、swap - 运维总结 ["Cannot allocate memory"问题]

    一.缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果 ...