Vijos1675 NOI2005 聪聪和可可 记忆化搜索
简单题,结果因为理解错题意懵逼了好久……
moveTo[x][y]表示聪聪在节点x,可可在节点y时,聪聪下一步应到达哪一个节点
dp[x][y]表示聪聪在节点x,可可在节点y,且轮到可可行动时,所需时间的数学期望(可可第一次行动不计入其内)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
typedef std::vector<int> Vec;
typedef Vec::iterator It;
;
const double notVis=-1.0;
Vec adj[maxN];
int N,E;
int C,K;
int moveTo[maxN][maxN];
void init()
{
;i<maxN;i++) adj[i].clear();
memset(moveTo,,sizeof(moveTo));
}
bool input()
{
if(scanf("%d%d",&N,&E)==EOF) return false;
init();
scanf("%d%d",&C,&K);
int v1,v2;
;i<=E;i++)
{
scanf("%d%d",&v1,&v2);
adj[v1].push_back(v2);
adj[v2].push_back(v1);
}
return true;
}
struct Node
{
int idx;
int layer;
Node(int i,int l):idx(i),layer(l) {}
bool operator < (const Node& other) const
{
return this->layer > other.layer ||
(this->layer == other.layer && this->idx > other.idx);
}
};
void calcMoveTo()
{
std::priority_queue<Node> pq;
;t<=N;t++)
{
moveTo[t][t]=t;
pq.push(Node(t,));
while(!pq.empty())
{
Node cur=pq.top();
pq.pop();
int& v=cur.idx;
for(It x=adj[v].begin();x!=adj[v].end();++x)
if(!moveTo[*x][t])
{
moveTo[*x][t]=v;
pq.push(Node(*x,cur.layer+));
}
}
}
}
double dp[maxN][maxN];
double solve_aux(int Cpos,int Kpos)
{
if(dp[Cpos][Kpos]!=0.0)
return dp[Cpos][Kpos];
for(It x=adj[Kpos].begin();x!=adj[Kpos].end();++x)
{
if(Cpos==(*x)) continue;
int Cnext=Cpos; bool ok=false;
;i<= && !ok;i++)
{
Cnext=moveTo[Cnext][*x];
if(Cnext==(*x))
{
dp[Cpos][Kpos]+=1.0;
ok=true;
}
}
if(!ok) dp[Cpos][Kpos]+=(1.0+solve_aux(Cnext,*x));
}
dp[Cpos][Kpos]/=double(adj[Kpos].size());
return dp[Cpos][Kpos];
}
double solve()
{
if(C==K) return 0.0;
;i<=;i++)
{
C=moveTo[C][K];
if(C==K) return 1.0;
}
memset(dp,,sizeof(dp));
;i<=N;i++) adj[i].push_back(i);
return 1.0+solve_aux(C,K);
}
int main()
{
while(input())
{
calcMoveTo();
printf("%.3lf\n",solve());
}
;
}
Vijos1675 NOI2005 聪聪和可可 记忆化搜索的更多相关文章
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)
传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostr ...
- 【NOI2005】聪聪和可可 概率与期望 记忆化搜索
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 958[Submit][Statu ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2335 Solved: 1373[Submit][Stat ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- 【bzoj1415】[Noi2005]聪聪和可可 期望记忆化搜索
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索
LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...
随机推荐
- -_-#【JS】隐含全局变量
隐含全局变量与明确定义的全局变量有细微的不同,不同之处在于能否使用delete操作符撤销变量 使用var创建的全局变量(这类变量在函数外部创建)不能删除不使用var创建的隐含全局变量(尽管它是在函数内 ...
- 培训机构出来的iOS学员怎么了?
事件回放 前几天在 iOS 开发群里看到有人贴了一个 v2ex 上的帖子(地址:https://www.v2ex.com/t/244437 ) ,大概说收到了 1000 多份某培训机构出来的学员简历. ...
- delphi调用webservice 转
如今 Web Service 已越来越火了,在DotNet已开发的Web Service中,Delphi 7如何方便的调用DotNet写的Web Service呢?方法有两种,一种是在Delphi ...
- 创建一个基本的Windows应用程序
以下是包含的头文件 #define WIN32_LEAN_AND_MEAN // 指示编译器不要包含我们并不需要的MFC内容 #include <windows.h> // 包含所有的Wi ...
- HDOJ/HDU 2567 寻梦(字符串简单处理)
Problem Description 每个人的童年都可能梦想过自己成为一个英雄,尤其是喜欢武侠的男生,Yifenfei也不例外. 童年的他常常梦想自己能成为一个绝世英雄,手拿一把灿灿发亮的宝剑,手挽 ...
- 实现自己的脚本语言ngscript之零
正式开始介绍前先扯点没用的. 从小玩basic长大的小朋友大多有一个梦想,就是自己实现一个basic解释器. 不过这里我实现的不是basic,而是一个语法和功能类似javascript的东西. 暂且称 ...
- Google幻灯片
本博文的主要内容有 .Google幻灯片的介绍 https://www.google.com/intl/zh-CN/slides/about/ 自行去注册Google账号,这里,不多赘述.
- ios新特性
@import 在xcode 5 下,为了更易于开发,增加了modules和 auto-linking 这两个新特性: 在以前,如果你要使用MapKit这个框架,你要这样做 1) 使用语句 #imp ...
- 深入解析Java中volatile关键字的作用
转(http://m.jb51.net/article/41185.htm)Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制 在java线 ...
- druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
使用durid连接池组件,执行sql时发现异常如下: Caused by: java.sql.SQLException: sql injection violation, part alway tru ...