CF1245E:Hyakugoku and Ladders

题意描述:

  • 给你一个\(10*10\)的矩阵,矩阵描述如下

    • 最开始的时候你在左下角,你的目标是到达左上角。
    • 你可以走路径或者爬梯子。
    • 路径的定义:
      • 如果当前在一行的最右边,你可以网上爬一格。
      • 如果在行内其他位置,你可以往旁边走。
    • 每一回合你都要掷一个六面的骰子,假设当前骰子的正面为\(r\)。如果到终点的距离小于\(r\),那么你将不能移动。否则你将移动\(r\)格,如果你最后移动到的位置有一个梯子,你可以选择爬上去或者不怕上去。
  • 你的目标是找到到达目的的回合的最小期望。

思路:

  • 期望\(dp\)。
  • 在二维上不是很方便,我们可以把二维看成一个一维数组。
  • \(f(i)\)表示到\(i\)需要多少回合。如果没有梯子的限制,那么有状态转移方程:
    • \(f(i)=\frac{f(i-1)+f(i-2)+...+f(i-6)}{6}+1\)
  • 那么有了梯子,我们只需要针对梯子转移过来的情况取\(min\)即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 15;
int g[maxn][maxn];
int nex[maxn][maxn];
int a[maxn*maxn];
double f[maxn*maxn];
int main()
{
for(int i = 1; i <= 10; i++)
for(int j = 1; j <= 10; j++)
nex[i][j] = (i-1)*10 + (i&1 ? j : 11-j); for(int i = 1; i <= 10; i++)
for(int j = 1, x; j <= 10; j++){
scanf("%d", &x);
a[nex[i][j]] = nex[i-x][j];
} f[1] = 0;
double sum = 0;
for(int i = 2; i <= 6; i++)
f[i] = (sum+6) / (i-1), sum += f[i]; for(int i = 7; i <= 100; i++)
{
sum = 0;
for(int r = 1; r <= 6; r++)
sum = sum + min(f[i-r], f[a[i-r]]);
f[i] = sum / 6.0 + 1;
} printf("%.10f", f[100]);
return 0;
}

CF1245E:Hyakugoku and Ladders的更多相关文章

  1. Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp

    E. Hyakugoku and Ladders Hyakugoku has just retired from being the resident deity of the South Black ...

  2. POJ2564:Edit Step Ladders

    浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html 题目传送门:http://poj.org/problem?id=2564 记\(f[i ...

  3. codeforces 597 div2 E. Hyakugoku and Ladders(概率dp)

    题目链接:https://codeforces.com/contest/1245/problem/E 题意:有一个10x10的网格,左下角是起点,左上角是终点,从起点开始,如图所示蛇形走到终点,每一步 ...

  4. Codeforces 1245 E. Hyakugoku and Ladders

    传送门 显然这个图是个 $DAG$ ,那么就可以考虑跑 $dp$ 了 先考虑没有梯子的情况,首先把每个位置标号,越后面的位置编号越小,终点位置编号为 $1$ 那么从终点往起点 $dp$ ,枚举当前位置 ...

  5. 并不对劲的CF1245E&F:Cleaning Ladders

    CF1245 E. Hyakugoku and Ladders 题目大意 有一个10 \(\times\) 10的网格,你要按这样的路径行走: 网格中有一些单向传送门,每个传送门连接的两个格子在同一列 ...

  6. Edit Step Ladders - UVA 10029

    题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...

  7. Codeforces Round #597 (Div. 2)

    A - Good ol' Numbers Coloring 题意:有无穷个格子,给定 \(a,b\) ,按以下规则染色: \(0\) 号格子白色:当 \(i\) 为正整数, \(i\) 号格子当 \( ...

  8. some problem

    CF1257F Make Them Similar $solution:$ 折半搜索后考虑如何维护两个数组的和,可以将 $A$ 中每个数减 $A_1$ ,$B$ 中每个数被减 $B_1$ ,$map$ ...

  9. java web 开发三剑客 -------电子书

    Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...

随机推荐

  1. MySQL 5.7.26安装及配置--windows10系统下

    安装过程省略,下载包解压即可 一.配置my.ini在解压目录下,新建一个my.ini [mysql] default-character-set=utf8 [mysqld] port = 3306 b ...

  2. Distributed and Parallel Computing

    Omega Network Model

  3. Docker 安装 Request Tracker 工单系统

    1.需求 docker 安装工单系统 Request Tracker,并需要支持 LDAP 登入. 2.制作镜像 1)request-tracker-base镜像 第一个镜像安装一些基础支持软件,如 ...

  4. Go gRPC 调试工具

    概述 最近这段时间工作挺忙的,发现已经 3 周没更文了... 感谢你们还在,今天给大家分享一款 gRPC 的调试工具. 进入正题. 当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口 ...

  5. win 10 上解压安装 MySQL 8

    win 10 上解压安装 MySQL 8 # 进入到mysql的bin目录底下操作: # 初始化mysql mysqld --initialize --console # 安装mysql服务 mysq ...

  6. 使用eclipse git插件合并merge部分代码方法

    当有一个父项目,它的下面有多个子项目:或者一个项目下边,只想合并部分路径,甚至部分文件的内容,使用下边的方法可以达到目的,特此记录: 1.主项目右键 -> team -> remove f ...

  7. C++初探

    //string1.cpp #include <iostream> int main() { using namespace std; ]={'d','o','g'}//这是char数组, ...

  8. C#集合中根据多个字段分组 group by linq表达式

    void Main() { var empList =new List<Employee> { , FName = , Sex = 'M'}, , FName = , Sex = 'F'} ...

  9. ASP.NET Core部署IIS问题总结

    部署准备工作 1.服务器开启添加IIS相关功能 1.1. 点击windows搜索到   “启用或关闭windows功能” 1.2 选择添加IIS的部分功能, 如下图所示 2.进入IIS,添加已经发布的 ...

  10. 1-Consul系列文章

    使用Consul做服务发现的若干姿势 Consul的反熵 [Consul]Consul架构-简介