bzoj1415 聪聪与可可 概率dp
链接: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相关推荐
- bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- [BZOJ1415]聪聪和可可
Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...
- BZOJ1415【NOI2005】聪聪和可可
题目描述 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小老鼠可可.虽 然灰姑娘非常喜欢她们俩,但是,聪聪终究是一只猫,而可可终究是一只老鼠, 同样不变的是,聪聪成天想着要吃掉可可. 一天,聪聪 ...
- 聪聪和可可(记忆化dp+数学期望)
emmmm 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下 ...
- 【题解】bzoj-1415 NOI-2005 聪聪与可可
Problem Luogu&bzoj Solution 这题一看就联想起了HNOI游走那道题,仔细一看发现不对 发现这题的转移是有终点的,所以可以用Dp,加上题目是一张图,推荐用记忆化搜索 显 ...
- bzoj1415 noi2005 聪聪和可可 期望
本来毫无思路,看到网上设了二维数组表示期望后,觉得很妙. 设f[i][j]为聪聪在i,可可在j的聪聪吃到可可的时间期望. dis[i][j]==1 ||==2 时,f[i][j]=1 ,i==j 时, ...
- 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)
题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include<iostream> #include<cstdio> ...
最新文章
- 2017清华本科生特等奖得主出炉,AI学霸乔明达获奖
- CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式
- [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
- “SQL Server does not allow remote connections”错误的解决
- 如何将类序列化并直接存储入数据库
- 深入理解Netscaler INat
- linux mount 日志,mount
- lua运算与php运算符,Lua 运算符
- Redis Command
- 苹果双系统怎么切换_华为双系统,你会用吗?实在太神了!一键开启,一台手机当两台用...
- 安川机器人io对照表_安川机器人按键功能一览
- “变速齿轮”研究手记
- ANSYS静力学分析的主要操作步骤
- 求梯形面积python
- 黑鲨3能升级鸿蒙5g吗,红魔5g和黑鲨3哪个好-红魔5g和黑鲨3参数对比
- PC端跳转QQ、企业微信、微信界面
- 计算机组成原理实验二:运算器实验
- 清华博士生导师亲授:高考志愿计算机/AI专业填报指南
- spring中的JdbcTemplate的使用方法
- Android 反编译apk文件
热门文章
- 基于JSP学生网上选课系统
- [Systemverilog学习笔记] Thread Communication-Event、Semaphore、mailbox
- 【SEO】利用网页监控来做百度同步推送
- 被解放的姜戈01 初试天涯
- IP地址映射绑定MAC地址
- CRM系统的“三驾马车”
- NST1001温度传感器驱动-FPGA
- STM32 SPI发送波形
- Rails-treasure chest4: 使用图表对资料进行分析chart.js(及其他);管理用户权限的gem 'Pumdit'(6000)...
- 网络与信息安全学习(五)