【题解】CF#24 D-Broken Robots
在某次考试的时候用过的办法,懒人必备……【笑哭】
一个非常显然的 dp,我们用 \(f[i][j]\) 表示第 \(i\) 行第 \(j\) 列的格子走到最后一排的期望步数转移即为
\(f[i][j] = \frac{f[i][j - 1] + f[i][j + 1] + f[i + 1][j] + f[i][j]}{4} + 1\)
略微的化一下简:
\(f[i][j] = \frac{f[i][j - 1] + f[i][j + 1] + f[i + 1][j] + 4}{3}\)
(当然,对于 j = 1 和 j = m 的情况是另外两个式子,但推导的方法是一样的)。这个式子使用高斯消元优化一下就能搞定,然而非常悲伤,像我这样的蒟蒻写高斯消元常常写挂,也不是很敢码。那怎么办办呢?人工大法好啊!
我们可以注意到行与行之间是不会相互转移的,我们可以认为当前行的 dp 数组为 f,下一行的 dp 数组为 g。那么对于 \(f[i][m]\) 而言,我们有
\(f[m] = \frac{f[m - 1] + g[m] + 3}{2}\)
也就是说,我们可以用 \(f[i - 1]\) 来表示出 \(f[i]\) 的值!
那么每从 \(f[j] -> f[j - 1]\),我们都可以得到一个递推式
\(f]j] = k * f[j - 1] + t\)
那么这个式子递归到尽头 f[1] 的时候
我们陡然发现式子中的未知数只剩下了一个 f[1]!
此时,只需不断回代就能得到 f[2 ... m]。
复杂度 \(O(n * m)\) ,非常优秀是吧~
#include <bits/stdc++.h>
using namespace std;
#define maxn 1050
#define db double
int n, m, S, T;
db f[maxn][maxn]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void DP(int p, int x, db k, db t)
{
if(!x) return;
if(x == )
{
f[p][x] = (f[p + ][x] + 3.0 + t) / (2.0 - k);
return;
}
db k1 = / (3.0 - k), t1 = (f[p + ][x] + 4.0 + t) / (3.0 - k);
DP(p, x - , k1, t1);
f[p][x] = f[p][x - ] * k1 + t1;
} int main()
{
n = read(), m = read(), S = read(), T = read();
for(int i = n - ; i >= ; i --)
{
db k = 0.5, t = 0.5 * (3.0 + f[i + ][m]);
DP(i, m - , k, t);
if(m == ) f[i][m] = f[i + ][m] + 2.0;
else f[i][m] = k * f[i][m - ] + t;
}
printf("%.10lf\n", f[S][T]);
return ;
}
【题解】CF#24 D-Broken Robots的更多相关文章
- CF 24 D. Broken robot
		D. Broken robot 链接. 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动.如果在左右边缘上,那么等价的概率不动,向右/左,向下.走到最后一行即结束.求期望结束的步数 ... 
- 【题解】CF24D Broken Robots(收敛性)
		[题解]CF24D Broken Robots http://codeforces.com/problemset/problem/24/D 解1(不会写,口胡的) 获得一个比较显然的转移式子 \(dp ... 
- [Codeforces-div.1 24D] Broken robots
		[Codeforces-div.1 24D] Broken robots 试题分析 显然设\(f_{i,j}\)为到\((i,j)\)的期望步数,将转移表达式列出来. 首先自己跟自己的项消掉. 然后规 ... 
- 竞赛题解 - CF Round #524 Div.2
		CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ... 
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)
		还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ... 
- 竞赛题解 - [CF 1080D]Olya and magical square
		Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ... 
- Codeforces Beta Round #24 D. Broken robot (打表找规律)
		题目链接: 点击我打开链接 题目大意: 给你 \(n,j\),再给出 \(m[0]\) 的坐标和\(a[0]-a[n-1]\) 的坐标. 让你输出 \(m[j]\) 的坐标,其中 \(m[i]\) 和 ... 
- [题解] [CF 1250J] The Parade
		题面 题目大意: 给定一个 \(n\) , 所有军人的数量均在 \([1, n]\) 给定 \(a_i\) 代表高度为 \(i\) 的军人的个数 你要将这些军人分成 \(k\) 行, 满足下面两个条件 ... 
- 题解 CF 1372 B
		题目 传送门 题意 给出 \(n\),输出 \(a\) ,\(b\) (\(0 < a \leq b < n\)),使\(a+b=n\)且 \(\operatorname{lcm}(a,b ... 
随机推荐
- 全球订单最多的成都优步推出"南北通勤线"业务
			滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ... 
- IOI 2017 Practice Contest mountains
			Mountains 题面 题意: 选最多的点使得两两看不见. 分析: 分治,solve(l,r)为区间[l,r]的答案.那么如果不选最高点,分治两边即可,选了最高点,那么在最高点看不见的区间里分治. ... 
- python之web架构
			一.web架构简介 web.py是一个轻量级Python web框架,它简单而且功能强大.web.py是一个开源项目.该框架由已故美国作家.Reddit联合创始人.RSS规格合作创造者.著名计算机黑客 ... 
- Sql Server 2008R2中使用CET进行递归查询
			在使用数据库的过程中,我们经常会遇到递归的查询.比如传入一个分类ID,要查出这个分类下的所有子分类,以及子分类的子分类.或者说传入一个部门ID,要查出这个部门下所有子部门的人员:在Or ... 
- android学习七 菜单
			1.菜单分类 常规菜单 子菜单 上下文菜单 图标菜单 辅助菜单 交替菜单 2.菜单类 andriod.view.menu 3.菜单的参数 名称:字符串标题 菜单ID:整数 ... 
- VIN码识别,车架号识别,OCR扫描工具
			近年二手车交易市场火爆,对二手车估值需要了详细解二手车的历史状况,车架号(VIN码)是车辆唯一的身份标识,也是了解二手车车况的入口,车商和二手车平台会频繁的进行车况查询,VIN码扫描识别技术给车辆估值 ... 
- 用IDEA编写spark的WordCount
			我习惯用Maven项目 所以用IDEA新建一个Maven项目 下面是pom文件 我粘上来吧 <?xml version="1.0" encoding="UTF-8& ... 
- 使用Iview Menu 导航菜单(非 template/render 模式)
			1.首先直接参照官网Demo例子,将代码拷贝进项目中运行, 直接报错: Cannot read property 'mode' of undefined. 然后查看官网介绍,有一行注意文字,好吧. 2 ... 
- 应用UserDefaults储存游戏分数和最高分
			应用UserDefaults储存游戏分数和最高分 我们在GameScene.swift里 private var currentScore:SKLabelNode! // 当前分数节点 private ... 
- (C#)设计模式之装饰模式
			1.装饰模式 动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更加灵活.*装饰模式是为已有功能动态添加更多功能的一种方式.*装饰模式将原有类中的核心职责与装饰功能分离.简化了原有 ... 
