链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1415

题目大意是:给一张无权无向图,一个人去追另一个人,保证被追的人初始点编号小于追的人初始点编号,被追的人随机选择走一条边或选择不走,追的人走能接近被追的人且终点编号最小的一条边,单回合可走两步,求期望步数。

首先,读入图后,我们需要预处理出每一回合,严格地讲是每一步追的人选择的边。如果说这个点可以在一步范围内追到就取追到的这个点,如果两点重合(这个在接下来会有用)就设为该点,否则,接近它的这个点就必须与扩展到它的这个点步数相同。显然这个要选择bfs。

bfs完成后,我们设数组f[i][j]为追的人在i,被追的人在j,期望追到的步数。对整张图记忆化搜索,如果已经到一块返回零,一步(之前的定义,第二步留在原地)或两步追到返回1,追不到则对被追的人每种选择进行递归搜索。

实际操作时还要注意:追的人选择能接近被追的人且终点编号最小的边,所以要用vector存图并对终点字典序排序。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<vector>
 6 using namespace std;
 7 const int maxn=985,maxm=985;
 8 vector<int>G[maxn];
 9 int du[maxn];
10 double f[maxn][maxn];
11 int n,e,c,m;
12 #include<queue>
13 int near[maxn][maxn];
14 void Spfa(int x)
15 {
16     bool vis[maxn]={0};
17     queue<int>q;
18     near[x][x]=x;
19     q.push(x);vis[x]=1;
20     while(!q.empty())
21     {
22         int t=q.front();q.pop();
23         for(int i=0;i<G[t].size();i++)
24         {
25             int v=G[t][i];
26             if(vis[v])continue;
27             if(t==x)near[x][v]=v;
28             else near[x][v]=near[x][t];
29             vis[v]=1;
30             q.push(v);
31         }
32     }
33 }
34 const double eps=1e-6;
35 double dp(int from,int to)
36 {
37     if(f[from][to]>eps)return f[from][to];
38     if(from==to)return 0;
39     int go=near[near[from][to]][to];
40     if(go==to)return f[from][to]=1;
41     double ans=dp(go,to);
42     for(int i=0;i<G[to].size();i++)
43     {
44         int v=G[to][i];
45         ans+=dp(go,v);
46     }
47     ans/=(double)(du[to]+1);
48     ans++;
49     return f[from][to]=ans;
50 }
51 int haha()
52 {
53     //freopen("cchkk.in","r",stdin);
54     //freopen("cchkk.out","w",stdout);
55     scanf("%d%d",&n,&e);scanf("%d%d",&c,&m);
56     for(int i=1;i<=e;i++)
57     {
58         int x,y;scanf("%d%d",&x,&y);
59         G[x].push_back(y);G[y].push_back(x);
60         du[x]++;du[y]++;
61     }
62     for(int i=1;i<=n;i++)sort(G[i].begin(),G[i].end());
63     for(int i=1;i<=n;i++)Spfa(i);
64     printf("%0.3lf",dp(c,m));
65 }
66 int sb=haha();
67 int main(){;}

转载于:https://www.cnblogs.com/Loser-of-Life/p/7181875.html

bzoj1415 聪聪与可可 概率dp相关推荐

  1. bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...

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

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

  3. BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp

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

  4. [BZOJ1415]聪聪和可可

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

  5. BZOJ1415【NOI2005】聪聪和可可

    题目描述 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小老鼠可可.虽 然灰姑娘非常喜欢她们俩,但是,聪聪终究是一只猫,而可可终究是一只老鼠, 同样不变的是,聪聪成天想着要吃掉可可. 一天,聪聪 ...

  6. 聪聪和可可(记忆化dp+数学期望)

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

  7. 【题解】bzoj-1415 NOI-2005 聪聪与可可

    Problem Luogu&bzoj Solution 这题一看就联想起了HNOI游走那道题,仔细一看发现不对 发现这题的转移是有终点的,所以可以用Dp,加上题目是一张图,推荐用记忆化搜索 显 ...

  8. bzoj1415 noi2005 聪聪和可可 期望

    本来毫无思路,看到网上设了二维数组表示期望后,觉得很妙. 设f[i][j]为聪聪在i,可可在j的聪聪吃到可可的时间期望. dis[i][j]==1 ||==2 时,f[i][j]=1 ,i==j 时, ...

  9. 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)

    题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include<iostream> #include<cstdio> ...

最新文章

  1. 2017清华本科生特等奖得主出炉,AI学霸乔明达获奖
  2. CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式
  3. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
  4. “SQL Server does not allow remote connections”错误的解决
  5. 如何将类序列化并直接存储入数据库
  6. 深入理解Netscaler INat
  7. linux mount 日志,mount
  8. lua运算与php运算符,Lua 运算符
  9. Redis Command
  10. 苹果双系统怎么切换_华为双系统,你会用吗?实在太神了!一键开启,一台手机当两台用...
  11. 安川机器人io对照表_安川机器人按键功能一览
  12. “变速齿轮”研究手记
  13. ANSYS静力学分析的主要操作步骤
  14. 求梯形面积python
  15. 黑鲨3能升级鸿蒙5g吗,红魔5g和黑鲨3哪个好-红魔5g和黑鲨3参数对比
  16. PC端跳转QQ、企业微信、微信界面
  17. 计算机组成原理实验二:运算器实验
  18. 清华博士生导师亲授:高考志愿计算机/AI专业填报指南
  19. spring中的JdbcTemplate的使用方法
  20. Android 反编译apk文件

热门文章

  1. 基于JSP学生网上选课系统
  2. [Systemverilog学习笔记] Thread Communication-Event、Semaphore、mailbox
  3. 【SEO】利用网页监控来做百度同步推送
  4. 被解放的姜戈01 初试天涯
  5. IP地址映射绑定MAC地址
  6. CRM系统的“三驾马车”
  7. NST1001温度传感器驱动-FPGA
  8. STM32 SPI发送波形
  9. Rails-treasure chest4: 使用图表对资料进行分析chart.js(及其他);管理用户权限的gem 'Pumdit'(6000)...
  10. 网络与信息安全学习(五)