千与千寻

题目链接:YBT2023寒假Day3 A

题目大意

一个 n*m 的平面,你要从 (0,0) 走到 (x,y),你等概率的向上或向右走,然后当你走到 (n-1,i) 再往右走,就是 (0,i),走到 (i,m-1) 再往上走,就是 (i,0)。
问你期望需要的步数。

思路

考虑一个直接的想法是直接把每个点都是一个量是它走到 ( x , y ) (x,y) (x,y) 的期望步数,但是量太多了。
考虑特殊的地方,就是传送,那我们需要维护的就只有边界的 2 ( n + m − 1 ) 2(n+m-1) 2(n+m−1) 个了。

然后你考虑求从左下角的某个点走到右上角的某个点,期望步数和期望概率,显然随便 DP 一下就有了。
然后考虑列方程:
从穿越点过来概率 ∗ 0.5 + 从左边 / 下面的点过来的概率 ∗ 0.5 = 这个变量的值 + 要这么走的期望步数 从穿越点过来概率*0.5+从左边/下面的点过来的概率*0.5=这个变量的值+要这么走的期望步数 从穿越点过来概率∗0.5+从左边/下面的点过来的概率∗0.5=这个变量的值+要这么走的期望步数
( ∗ 0.5 *0.5 ∗0.5 是因为还要走一步才能过来或者穿越,那个期望步数记得是两个的和)

然后列出式子高斯消元,然后注意最后还要走到 ( x , y ) (x,y) (x,y),反过来就是从 ( x , y ) ∼ ( 0 , 0 ) (x,y)\sim (0,0) (x,y)∼(0,0)。
当然我们还要加上直接不用传送就走到的期望。

代码

#include<cstdio>
#include<algorithm>using namespace std;const int N = 105;
int n, m, x, y;
double g[N][N][N * 2], f[N][N], G[N * 2][N * 2];double Abs(double x) {return x < 0 ? -x : x;} int main() {freopen("walk.in", "r", stdin);freopen("walk.out", "w", stdout); scanf("%d %d %d %d", &n, &m, &x, &y);for (int i = 0; i <= n - 2; i++) g[i][m - 1][i + 1] = 1;for (int i = 0; i <= m - 2; i++) g[n - 1][i][n + i] = 1;for (int i = n - 2; i >= 0; i--)for (int j = m - 2; j >= 0; j--) {for (int k = 1; k <= n + m - 2; k++) {g[i][j][k] = (g[i + 1][j][k] + g[i][j + 1][k]) / 2.0;}f[i][j] = 1.0 + (f[i + 1][j] + f[i][j + 1]) / 2.0;}int tot = 0;for (int i = 0; i <= n - 2; i++) {tot++;for (int j = 1; j < n + m; j++) G[tot][j] = g[i][0][j] / 2.0;//穿越 if (i != n - 2) G[tot][i + 2] += 0.5;//旁边左走 G[tot][n + m - 1] = -f[i][0] / 2.0 - 1.0;//期望步数(穿越的加上旁边走的) G[tot][tot]--;//加上自己 }for (int i = 0; i <= m - 2; i++) {tot++;for (int j = 1; j < n + m; j++) G[tot][j] = g[0][i][j] / 2.0;if (i != m - 2) G[tot][n + i + 1] += 0.5;G[tot][n + m - 1] = -f[0][i] / 2.0 - 1.0;G[tot][tot]--;}for (int i = 1; i <= tot; i++) {int k = i;for (int j = i + 1; j <= tot; j++)if (Abs(G[j][i]) > Abs(G[k][i])) k = i;if (!G[k][i]) while (1);swap(G[i], G[k]);for (int j = 1; j <= tot; j++) {if (i == j) continue;double tmp = G[j][i] / G[i][i];for (int k = i + 1; k <= tot + 1; k++) {G[j][k] -= G[i][k] * tmp;}}}double ans = 0;for (int i = 1; i <= tot; i++)ans += g[n - 1 - x][m - 1 - y][i] * G[i][tot + 1] / G[i][i];ans += f[n - 1 - x][m - 1 - y];printf("%.10lf", ans);return 0;
}

【YBT2023寒假Day3 A】千与千寻(期望DP)(高斯消元)相关推荐

  1. LightOJ 1151 Snakes and Ladders (期望DP + 高斯消元)

    Description 'Snakes and Ladders' or 'Shap-Ludu' is a game commonly played in Bangladesh. The game is ...

  2. ICPC 2005 hangzhou Generator (UVA1358)KMP + 期望DP / 高斯消元

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Generator Weblink https://www.luogu.com.cn/problem/ ...

  3. P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为nnn,剩余hphphp点生命,然后每个时刻如果生命值没有满那么有1m+1 ...

  4. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元

    [BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...

  5. 【BZOJ2337】XOR和路径,概率期望DP+高斯消元

    Time:2016.08.27 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 与游走思路有一定相似的地方 对答案的每一位进行判断 通过高斯消元解出每个点到n xor路径为1的概率 ...

  6. BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元

    题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...

  7. 【BZOJ3640】JC的小苹果 概率DP+高斯消元

    [BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...

  8. BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】

    题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...

  9. BZOJ 3270: 博物馆 [概率DP 高斯消元]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...

  10. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元

    BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...

最新文章

  1. 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
  2. google套件_Google 推出 3 款语音识别应用,想用 AI 帮语言障碍者说话
  3. 项目奖金一般有多少_全年一次性奖金如何进行纳税筹划?
  4. centos忘记root用户的密码
  5. 从一个故事开始谈项目与团队管理
  6. Python办公自动化 - 3 Excel办公自动化
  7. 云版 Android 系统来了?
  8. 学习单片机入门需要准备什么?
  9. Javascript:使用setAttribute设置某个标签节点display为none仍然显示
  10. Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)
  11. 东南大学 软件工程 复试3门科目历年真题 思维导图整理(软件工程/数据库/计算机网络)
  12. ubuntu 18.04 + SVO2.0
  13. windows批量ping测试脚本
  14. 全年营业额怎么计算_年度利润总额如何计算
  15. css固定定位如何基于父级来定为而不是视口
  16. Context是什么
  17. Spring Boot默认异常处理BasicErrorController源码解读
  18. 自建网盘利用OneDrive,oneindex网盘
  19. pyTorch 图像分类模型训练教程
  20. 手动卸载 Office 2013 或 Office 365

热门文章

  1. 遍历List<object>
  2. 带你全面了解积分商城,逐步完善积分商城运营
  3. android studio 倒计时,AndroidStudio项目制作倒计时模块的方法
  4. word文档图标变成白纸_Word文件图标变成空白了,怎么办?
  5. redis基础入门及Python中的简单使用
  6. OAuth 2.0 安全案例回顾
  7. 伙伴云入选《2021年中国企业服务研究报告》
  8. 浅谈Substance painter/Designer软件
  9. 关于LinkedList
  10. 如何用PS制作褪色老旧照片效果