题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃掉可可,那机器人会再向可可的方向移动一格,如果有两个节点到可可的距离相等,那机器人会移动到编号较小的一个节点.然后可可会等可能性移动到与它的任意一个相连的节点或者原地不动(即使她明知道移动到某个节点会被吃掉).即1/(outc[x]+1),outc为出度.求可可被吃掉时机器人走的期望时间 概率DP记忆化+…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 乍一看和“游走”一样.于是高斯消元.n^2状态,复杂度n^6…… 看看TJ,发现因为聪聪不是随便走的,所以聪聪一直逼近可可.故其实无环.可以记搜. (1A还是不错的) #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std;…
用最短路暴力搞出s(i, j)表示聪聪在i, 可可在j处时聪聪会走的路线. 然后就可以dp了, dp(i, j) = [ dp(s(s(i,j), j), j) + Σdp(s(s(i,j), j), to) ] / (degree[i]+1) 边(j, to)存在. 复杂度应该差不多是O(NM) ------------------------------------------------------------------------------- #include<cstdio> #i…
概率dp... http://blog.csdn.net/Vmurder/article/details/46467899 ( from : [辗转山河弋流歌 by 空灰冰魂] ) 这个讲得很好 , 推推公式就可以 O( n ) , 但是 n 最大是99999999 , 怎么破....其实 n 很大时概率基本不动了...所以只需计算到某一个较大值时就可以停下来了... ----------------------------------------------------------------…
大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率dp:对于k=1的时候,把所有存在的位乘0.5就行了,对于k=2的时候就可以用类似推反演的方法(转换枚举顺序之类的)退出来一个式子,然后你只需要求个概率(很好推,也很好求)就可以啦 线性基:搜索之前还有dp之前预处理用的(只是构造一下) 然而我的做法却是,先求出线性基,再用期望概率dp(类似OSU!…
2318: Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币时有p的概率投掷出他想投的一面,同样,Bob有q的概率投掷出他相投的一面. 现在Alice先手投掷硬币,假设他们都想赢得游戏,问你Alice胜利的概率为多少. Input 第一行一个正整数t,表示数据…
传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走很像,只不过这道题限制了一个人走的方向,两人间的距离具有了阶段性!可以直接$DP$ 求期望一般倒推 $f[i][j]$表示聪在$i$可在$j$抓住的期望时间 $bfs$预处理$g[i][j]$表示聪在$i$可在$j$下一步聪走到哪里 这样聪的行动就知道了,转移枚举可的行动就行啦 边界:$f[i][i…
期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了. code: #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> #define N 1004 #define L…
直接上记忆化搜索 #include<queue> #include<cstdio> #include<algorithm> using namespace std; int read_p,read_ca; inline int read(){ read_p=;read_ca=getchar(); ') read_ca=getchar(); +read_ca-,read_ca=getchar(); return read_p; } struct na{ int y,ne;…
因为边权为1所以a直接bfs瞎搞就行--我一开始竟然写了个spfa #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; const int N=1005,inf=1e9; int n,m,st,ed,h[N],cnt,a[N][N],b[N][N],dis[N][N],d[N]; double f[N][N]; bool v[N]…
传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> using namespace std; const int MAXN = 1005; inline int…
BZOJ 1499 瑰丽华尔兹 | 单调队列优化DP 题意 有一块\(n \times m\)的矩形地面,上面有一些障碍(用'#'表示),其余的是空地(用'.'表示).每时每刻,地面都会向某个方向倾斜,但不同时刻倾斜方向可能不同:具体来说,当时间处于区间\([l_i, r_i]\)内时,向\(d_i\)方向倾斜(输入保证给出的所有区间是连续的). 海上钢琴师1900的钢琴在这块地面上滑动,每时每刻,可以选择让钢琴向着地面倾斜的方向滑动一格,或是待在原地不动.当然,钢琴不能滑到障碍上,也不能滑出矩…
2688: Green Hackenbush Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 42  Solved: 16 Description   有一个古老的游戏叫做Green Hackenbush,游戏是这样进行的:两个人轮流在一棵树上删边,每次删边后不与根联通的子树直接被ignore,不能删边的游戏者输.Alice和Bob也在玩这个游戏,不过他们面对的是n棵树,第i棵树是含有a[i]个节点的二叉树.先手的Alice想知道自己有多大的概率获…
大前提,把两个点的组合看成一种状态 x 两种思路 O(n^7) f[x]表示在某一个点的前提下,这个状态经过那个点的概率,用相邻的点转移状态,高斯一波就好了 O(n^6) 想象成臭气弹,这个和那个的区别只是状态维数变化,f[x]表示这个状态出现的概率,高斯一下就好了 我比较傻只想出来O(n^7) #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef doubl…
题目背景 四次死亡轮回后,昴终于到达了贤者之塔,当代贤者夏乌拉一见到昴就上前抱住了昴“师傅!你终于回来了!你有着和师傅一样的魔女的余香,肯定是师傅”.众所周知,大贤者是嫉妒魔女沙提拉的老公,400年前与神龙.剑圣一起封印魔女因子暴走的莎缇拉.在魔女茶会的时候,莎缇拉也表示过对昴浓浓的爱意,昴便是被莎缇拉召唤来异世界的.而贤者之塔中的资料与试炼,似乎都指向同一种可能性……记忆的轮廓,逐渐显形…… 题目描述 通往贤者之塔的路上,有许多的危机.我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1499 简单的单调队列优化dp.(然而当时却WA得不行.今天总算填了坑) 注意滚动数组赋初值应当继承上一次的该位置的值.还有转移的时候取个max. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ,INF=;// ][N][N],ans,q[N],h,t; char…
以后写dp还是向后转移吧--写的把前面加起来的版本怎么也调不过去 首先注意,因为地图碎片只占1体积,所以>n,<-n的体积是没用的,所以就可以把体积降到n级别,然后用这场胜负像后转移即可,滚动数组优化 #include<iostream> #include<cstdio> using namespace std; const int N=405; int n,l,m,a[N]; double p[N],f[2][N][N],ans; int main() { scanf…
选取任意一个点为root , size[ x ] 表示以 x 为根的子树的奶牛数 , dp一次计算出size[ ] && 选 root 为集会地点的不方便程度 . 考虑集会地点由 x 点向它的子节点 son 转移 , 那么以 son 为集会地点比以 x 为集会地点要多 dist( x , son ) * ( tot - size[ x ] ) - dist( x , son ) * size[ x ] = dist( x , son ) * ( tot - 2 * size[ x ] )…
数学期望+记忆化搜索 论文:<浅析竞赛中一类数学期望问题的解决方法>——汤可因  中的第一题…… Orz 黄学长 我实在是太弱,这么简单都yy不出来…… 宽搜预处理有点spfa的感觉= =凡是更新了的,都要重新入队更新一遍…… dp的记忆化搜索过程好厉害…… 期望这里一直很虚啊,赶紧再多做点题熟悉熟悉…… /************************************************************** Problem: 1415 User: Tunix Langu…
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1640  Solved: 962 Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点Ai和景点Bi之间有一条路. 所有的路都是无向的,即…
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2335  Solved: 1373[Submit][Status][Discuss] Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点…
题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的时候聪聪下一步会往哪里走.然后--一个记忆化搜索就轻易地解决掉了-- 至于转移方程吗,我觉得也没有必要写了--你要是实在不知道就看一看代码吧-- 下面贴代码: #include<iostream> #include<cstdio> #include<cstring> #in…
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先因为聪聪的步数大于可可,所以不可能出现循环,因此是DAG上的期望DP,用记忆化搜索解决. 每个点bfs预处理p[x][y]表示x走向y的第一步位置,设f[x][y]表示聪聪在x可可在y追上的期望时间. $$f(x,y)=\sum_{z}\frac{f(g[g[i][j]]][j],z)}{out[x]+1…
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 958[Submit][Status][Discuss] Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点A…
BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点Ai和景点Bi之间有一条路. 所有的路都是无向的,即:如果能从A走到B,就可以从B走到A. 输入保证任何两个景点之间不会有多于一条路直接相连,且聪聪和可可之间…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是一道经典的求期望的题,尽管我的代码里把那个记忆化搜索那个叫做dp,但事实上这不是动态规划,只是递推. 先预处理出x[i][j],表示聪聪在i,可可在j时,下一步聪聪到达的顶点标号,f[i][j]是那张记忆化搜索的表,表示聪聪在i,可可在j时,期望所需的时间,out[i]表示i点的出度(其实就是度啦,…
其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include <cstring> #define N 1001 using namespace std; double f[N][N]; int n,m,cnt,a,b; *N+]; int head[N],ds[N],q[N],dis[N][N],p[N][N]; inline int read() { ,…
Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点Ai和景点Bi之间有一条路. 所有的路都是无向的,即:如果能从A走到B,就可以从B走到A. 输入保证任何两个景点之间不会有多于一条路直接相连,且聪聪和可可之间必有路直接或间接的相连. Output 输出1个实数,四舍五入保留三位小数,表示平均多少个时…
Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点Ai和景点Bi之间有一条路. 所有的路都是无向的,即:如果能从A走到B,就可以从B走到A. 输入保证任何两个景点之间不会有多于一条路直接相连,且聪聪和可可之间必有路直接或间接的相连. Output 输出1个实数,四舍五入保留三…
我们可以用n次BFS预处理出 to[][]数组,to[i][j]表示聪聪从i点到j点第一步会走哪个点. 那么对于聪聪在i点,可可在j点,聪聪先走,定义dp[i][j]表示步数期望. 那么显然有dp[i][j]=(sigma(dp[p][w])+dp[p][j])/(dee[j]+1)+1. 其中p表示to[to[i][j]][j],w表示j点邻接的点. 边界状态就是 如果i==j,那么dp[i][j]=0. 如果i和j的距离在聪聪的一步之内,那么dp[i][j]=1. 记忆化搜索一下即可. #…