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个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...
随机推荐
- bzoj1053
不难发现,要让约数尽可能多,那么素因子越小的的指数一定越大可能的素因数的种类也不超过10种然后直接暴搜即可 ..] ,,,,,,,,,); var n,ant,ans:int64; procedure ...
- HDU 1150 Machine Schedule
题目大意: 有两台机器A和B以及K个需要运行的任务.A机器有N种不同的模式,B机器有M种不同的模式,而每个任务都恰好在一台机器上运行. 如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B ...
- 两次fopen不同的文件返回相同的FILE* 地址
最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了.以下代码是对这个bug的概括: auto fp1 = ...
- HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)
Problem Description 给你N个整数,x1,x2-xn,任取两个整数组合得到|xi-xj|,(0 < i,j<=N,i!=j). 现在请你计算第K大的组合数是哪个(一个组合 ...
- ubuntu14.04 wps字体缺失问题
字体 下载安装字体即可
- 来更新一篇blog吧
最近做了一下hackerrank的20/20的比赛.平时都只能过2题,这周顺利地通过了四道题目竟然.当妄图冲击衬衫的时候,发现剩下三个题一点招数都没有,之后就跑去看了一下node.js了... 这次比 ...
- record
http://www.cnblogs.com/90zeng/p/python_translation.html http://www.cnblogs.com/netfocus/p/4478094.ht ...
- Java中如何使用Redis做缓存
基本功能测试 1.程序基本结构 2.主要类 1)功能类 package com.redis; import java.util.ArrayList; import java.util.Iterator ...
- Away3d 骨骼动画优化
很多朋友说Away3D 的骨骼数限制在32根,确切的说应该是Stage3D 的限制.在 AGAL2.0之前 VC寄存器是128个,每个vc常量寄存器最大只能容纳4位,transform占用一个4*4的 ...
- AngularJS的开发工具---yeoman 简易安装
AngularJS 不错,yeoman作为推荐开发工具,网上的安装步骤较烦,这里给出简易步骤. 1.安装 Ruby 自己到 Ruby 官方下载最新安装包: http://rubyinstall ...