题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 95 25 223 57 输出样例 0.858 提示 题解 毒瘤dp题 我们设\(f[x][y][s][h]\)表示从点\((x,y)\)出发,所有陷阱状态为\(s\),生命值为\(h\),存活的期望概率 我们枚举邻点,选择存活概率最大的作为当前\(f\)的值 除了墙,有以下情况: ①如果是空地或者终…
[BZOJ2246][SDOI2011]迷宫探险(搜索,动态规划) 题面 BZOJ 洛谷 题解 乍一看似乎是可以求出每个东西是陷阱的概率,然而会发现前面走过的陷阱是不是陷阱实际上是会对当前状态产生影响的.考虑一下状压,因为出了是陷阱和不是陷阱,还有一种情况是未知.所以三进制状压. \(0\)表示是有害陷阱,\(1\)表示不是,\(2\)表示未知. 那么假如我们知道了一个当前的三进制状态,如何确定当前的某个未知的陷阱是否有害的概率呢? 这个显然可以暴力提前预处理出来. 那么这就很好办了,设\(f[…
LINK:迷宫探险 题目中要求在最优的策略下的最大概率 而并非期望概率. 一个坑点 题目中虽然没有明说 但是 探险者是知道地图的模样和每个陷阱的概率的. 所以才有最优策略一说. 最优策略尽管不知道可以随便走取max即可. 容易想到 对于当前状态 有 x,y,hp,s 来描述 .倒着设状态 那就是当前状态能到达终点的最大概率. 定义hp s都是递增的 不过还是不能线性递推.存在问题 可能状态之间可以互相转移的问题. 显然状态转移回来是不必要的 所以此时概率为0 利用dfs栈可以很容易判断出来 所以…
概率DP 记忆化搜索即可,垃圾数据,就是过不掉最后一组 只好打表 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;--i) int a[31][31]…
题目大意:太长了,略 bzoj luogu 并没有想到三进制状压 题解: 3进制状压陷阱的状态,0表示这种陷阱的状态未知,1已知危险,2已知不危险 然后预处理出在当前状态下,每种陷阱有害的概率,设为$g[s][i]$ 已知是危险的,有害概率为1 已知是不危险的,有害概率为0 未知的部分用概率表格里符合当前状态的部分,才是正确的(比如第4个样例输出了0.857就是没用这种方法去求概率) 定义$f[x][y][s][h]$表示当前在(x,y),陷阱的状态为s,当前血量是h 然后记忆化爆搜即可 ...…
题目链接 求最大的存活概率,DP+记忆化. 用f[s][x][y][hp]表示在s状态,(x,y)点,血量为hp时的存活概率. s是个三进制数,记录每个陷阱无害/有害/未知. 转移时比较容易,主要是在陷阱未知时需要知道当前状态这个陷阱为有害/无害的概率,并用这两个概率相加. 如何求某个状态下未知陷阱是否有害的概率呢(以下求有害概率,即 有害/(有害+无害)) DFS枚举每个陷阱已知有害/无害/未知的状态,我们需要处理未知陷阱在该状态下的概率. 枚举每个未知的陷阱,再枚举2^K的概率数组,只有当满…
Description 题目链接 Solution 用三进制表示陷阱状态,1表示有害,2表示无害,0表示不知道 用\(f[S][i]\)表示状态为S时陷阱i有害的概率,这个可以预处理出 \(d[S][i][j][h]\)表示状态为S,在坐标\((i,j)\),血量为h时的答案 然后就可以DP了,记忆化搜索 Code #include <cstdio> #include <algorithm> #define db double #define Sta 300 #define N 3…
链接:https://www.nowcoder.com/acm/contest/93/D来源:牛客网 题目描述 给你一个n*m的迷宫,这个迷宫中有以下几个标识: s代表起点 t代表终点 x代表障碍物 .代表空地 现在你们涵哥想知道能不能从起点走到终点不碰到障碍物(只能上下左右进行移动,并且不能移动到已经移动过的点). 输入描述: 输入第一行一个整数T(1<=T<=10)接下来有T组测试数据,对于每一组测试数据,第一行输入2个数n和m(1<=n,m<=500)接下来n行,每行m个字符…
今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来定义自己的方法,称为递归定义. 而dfs作为一种回溯算法,是从问题的某一种可能出发, 搜索从这种情况出发所能达到的所有可能, 当这一条路走到” 尽头 “的时候, 再倒回出发点, 从另一个可能出发, 继续搜索. 我的理解是 dfs逻辑上是一种回溯 实现却是用递归来实现的 那么什么是记忆化搜索呢,在进行…
题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移动一个方格.数据保证起点上没有障碍. 题目描述 无 输入格式 第一行N.M和T,N为行,M为列,T为障碍总数.第二行起点坐标SX,SY,终点坐标FX,FY.接下来T行,每行为障碍点的坐标. 输出格式 给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数. 输入输出样例 输入…