CF24D Broken robot 后效性DP
这题咕了好久.....
设$f[i][j]$表示从$(i,j)$到最后一行的期望步数;
则有
$ f[i][1]=\frac{1}{3}(f[i][1]+f[i][2]+f[i+1][1])+1$
$ f[i][m]=\frac{1}{3}(f[i][m]+f[i][m-1]+f[i+1][m])+1$
$ f[i][j]=\frac{1}{4}(f[i][j]+f[i][j-1]+f[i][j+1]+f[i+1][j])+1$
所以他有后效性(于是我们疯狂迭代)
然而要高斯消元。。。。
具体的来说,就是把每行的每个转移都写在系数矩阵里,对这一行进行高斯消元;增广矩阵要写已知量;
化简上面的式子:
$\frac{2}{3}*f[i][1]-\frac{1}{3}*f[i][2]=\frac{1}{3}*f[i+1][1]+1 $
$\frac{2}{3}*f[i][m]-\frac{1}{3}*f[i][m-1]=\frac{1}{3}*f[i+1][m]+1$
$\frac{3}{4}*f[i][j]-\frac{1}{4}*f[i][j-1]-\frac{1}{4}*f[i][j+1]=\frac{1}{4}*f[i+1][j]+1$
注意,高斯消元消的是某一行,每个位置的值。
又注意到上面的有分数不美观,实际写的时候可以化简(方程两边同乘1个数)。
还有,高斯消元的过程需要简化
深蓝代表系数矩阵中有数的位置,浅灰蓝色为增广矩阵。
先消成这个样子:
然后从最后一行向上代入
#include<cstdio>
#include<iostream>
#define R register int
#define db double
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,x,y;
db f[],a[][];
inline void init() {
a[][]=,a[][]=-,a[][m+]=+f[];
a[m][m]=,a[m][m-]=-,a[m][m+]=+f[m];
for(R i=;i<m;++i) a[i][i]=,a[i][i-]=a[i][i+]=-,a[i][m+]=f[i]+;
}
inline void Gauss() {
for(R i=;i<=m;++i) { if(i<m) a[i][i+]/=a[i][i];
a[i][m+]/=a[i][i],a[i][i]=;
a[i+][i+]-=a[i][i+]*a[i+][i];
a[i+][m+]-=a[i][m+]*a[i+][i],a[i+][i]=;
} for(R i=m-;i;--i) a[i][m+]-=a[i][i+]*a[i+][m+];
for(R i=;i<=m;++i) f[i]=a[i][m+];
}
signed main() {
n=g(),m=g(),x=g(),y=g();
if(m==) printf("%.10lf\n",(db)*(n-x));
else { for(R i=n-;i>=x;--i) {
init(); Gauss();
} printf("%.10lf\n",f[y]);
}
}
2019.05.24
CF24D Broken robot 后效性DP的更多相关文章
- 『Broken Robot 后效性dp 高斯消元』
Broken Robot Description 你作为礼物收到一个非常聪明的机器人走在矩形板上.不幸的是,你明白它已经破碎并且行为相当奇怪(随机).该板由N行和M列单元组成.机器人最初位于第i行和第 ...
- 【题解】CF24D Broken Robots(收敛性)
[题解]CF24D Broken Robots http://codeforces.com/problemset/problem/24/D 解1(不会写,口胡的) 获得一个比较显然的转移式子 \(dp ...
- CF24D Broken robot
题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这 ...
- CodeForces 24D Broken robot (概率DP)
D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Luogu P2973 [USACO10HOL]赶小猪Driving Out the Piggi 后效性DP
有后效性的DP:$f[u]$表示到$u$的期望次数,$f[u]=\Sigma_{(u,v)} (1-\frac{p}{q})*f[v]*deg[v]$,最后答案就是$f[u]*p/q$ 刚开始$f[1 ...
- Cogs 376. [IOI2002]任务安排(后效性DP)
[IOI2002]任务安排 ★☆ 输入文件:batch.in 输出文件:batch.out 简单对比 时间限制:1 s 内存限制:128 MB N个任务排成一个序列在一台机器上等待完成(顺序不得改变) ...
- $CF24D\ Broken Robot\ DP+$高斯消元
Luogu Description 你收到的礼物是一个非常聪明的机器人,行走在一块长方形的木板上.不幸的是,你知道它是坏的,表现得相当奇怪(随机).该板由n行和m列的单元格组成.机器人最初是在i行和j ...
- cf24D. Broken robot(高斯消元)
题意 题目链接 Sol 今天上午的A题.想出来怎么做了但是没时间写了qwq 思路很简单,首先把转移方程列一下,发现每一个位置只会从下一行/左右转移过来,而且第N行都是0,那么往下转移的都可以回带. 剩 ...
- 【CF24D】Broken Robot (DP+高斯消元)
题目链接 题意:给定一个\(n\times m\)的矩阵,每次可以向→↓←移动一格,也可以原地不动,求从\((x,y)\)到最后一行的期望步数. 此题标签\(DP\) 看到上面这个肯定会想到 方法一: ...
随机推荐
- HihoCoder1339 Dice Possibility(概率DP+母函数)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is possibility of rolling N dice and the sum of the numb ...
- bzoj 3165: [Heoi2013]Segment 线段树
题目: Description 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第i条被插入的线段的标号为i. 给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. ...
- 洛谷【P3407】散步
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...
- Linux编程里getopt_long_only函数用法详解
在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项. 程序中主 ...
- C#中打开文件、目录、保存窗口
打开文件代码: try { OpenFileDialog of = new OpenFileDialog(); of.ShowDialog(); txt_destFilePath.Text = of. ...
- Jenkins配置邮件SMTP(使用QQ邮箱)
一.QQ邮箱中开启SMTP服务 进入QQ邮箱的设置页面,选择开启POP3/SMTP服务 需要发送一条短信开启服务,成功后,会收到一个密码,一定要截图.复制密码保存好 二.Jenkins中配置SMTP ...
- java报表开发之报表总述
转自:https://blog.csdn.net/u011659172/article/details/40504271?utm_source=blogxgwz6
- df查看分区使用情况
Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计.语法 df [选项]... [FILE]... -a, --all 包含所有的具有 0 Blocks 的文件系统 ...
- 面试题: Spring 框架 Bean的生命周期
[Java面试五]Spring总结以及在面试中的一些问题. 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本 ...
- Learning Python 008 正则表达式-002 findall()方法
Python 正则表达式 - findall()方法 重点 findall()方法的使用 - 程序讲解 简单的符号的使用 正则表达式的库文件是re,先导入库文件: import re .的使用举例 # ...