【题解】CF24D Broken Robots

http://codeforces.com/problemset/problem/24/D

解1(不会写,口胡的)

获得一个比较显然的转移式子

\(dp(i,j)\)代表在\((i,j)\)坐标需要期望的走的次数

\[dp(i,j)=0.25(1+dp(i-1,j)+dp(i,j-1)+dp(i,j+1))
\]

然而我们可以发现这个式子不满足无后效性..也找不到一种合适的顺序DP。

我们发现可以高斯消元,但是\(O(n^4)\)的复杂度我们接受不了。

式子里面的\(dp(i-1,j)\)是上一行的事情,不需要考虑,直接转移即可,我们把\(dp(i,j)\)抽象为\(x_j\)

那么我们考虑的是。

\[x_j=0.25(1+l_j+x_{j-1}+x_{j+1})
\]

写成划一下

\[-0.25x_{j-1}+x_j-0.25x_{j+1}=0.25l_j+0.25
\]

写成矩阵

\[\begin{pmatrix}
1&-0.25&0& 0&0&0&0.25l_1+0.25
\\
-0.25&1&-0.25& 0&0&0&0.25l_2+0.25
\\
0&-0.25&1&-0.25&0&0&0.25l_3+0.25
\\
0&0&-0.25&1&-0.25&0&0.25l_4+0.25
\\
0&0&0&-0.25&1&-0.25&0.25l_5+0.25
\\
0&0&0&0&-0.25&1&0.25l_6+0.25
\end{pmatrix}
\]

魔改一下高斯消元即可。

解2

众所周知,概率函数具有收敛性。 并且是指数地收敛的。又因为期望的式子里有概率作为因子,所以它应该是收敛的。(其实不是应该!是一定!若概率收敛则期望收敛(特殊情况除外),具体证说明可以把概率和随机变量分开DP!)

好,既然我们已经知道了这个函数具有收敛性,那么我们就让他在每一行就多转移几次就好了。具体操作就是让每个点按照顺序每次从左边转移过来一次,从右边转移过来一次。重复这个步骤随便多少次就好了。

由于精度只要\(10^{-4}\),我们只需要\(\log_{\frac 1 3}10^{-4}=9\)次就好了。此处的分析是错误的,请高手说明一下QAQ。注意,这里的"概率函数的收敛"性是抽出一行看的,不能在转移的时候把自己的\(0.25\)和上一行的\(0.25l\)加进来,不然显然是个发散的函数。

为了方便统计答案,我们反着dp,毕竟从最后一行到起点的期望步数=从起点到最后一行的期望步数。

\(dp(i,j)\)表示从最后一行到这一点\((i,j)\)的期望步数。

转移:

\[dp(i,j)=1/dr[i][j]\times (dp[i+1][j]+dp[i][j-1,j,j+1])+1
\]

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=1e3+5;
typedef long double lb;
lb dp[maxn][maxn],ans;
const lb qt[]={0,(lb)1.0/1,(lb)1.0/2,(lb)1.0/3,(lb)1.0/4};
int cnt;
int n,m;
int x,y;
int main(){
n=qr();m=qr();
x=qr();y=qr();
const int lit=50000000/(m)/(n-x+1);
for(register int t=n-1;t>=x;--t){
for(register int t0=1;t0<=lit;++t0){
if(m>1)
dp[t][1]=qt[3]*(dp[t+1][1]+dp[t][2]+dp[t][1])+1,dp[t][m]=qt[3]*(dp[t+1][m]+dp[t][m-1]+dp[t][m])+1;
if(m==1) dp[t][1]=qt[2]*(dp[t][1]+dp[t+1][1])+1;
for(register int i=2;i<m;++i)
dp[t][i]=qt[4]*(dp[t+1][i]+dp[t][i-1]+dp[t][i]+dp[t][i+1])+1;
}
}
cout.precision(10);
cout<<dp[x][y]<<endl;
return 0;
}
//18.0038068653

【题解】CF24D Broken Robots(收敛性)的更多相关文章

  1. 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$ $ ...

  2. 再论EM算法的收敛性和K-Means的收敛性

    标签(空格分隔): 机器学习 (最近被一波波的笔试+面试淹没了,但是在有两次面试时被问到了同一个问题:K-Means算法的收敛性.在网上查阅了很多资料,并没有看到很清晰的解释,所以希望可以从K-Mea ...

  3. K-Means算法的收敛性和如何快速收敛超大的KMeans?

    不多说,直接上干货! 面试很容易被问的:K-Means算法的收敛性. 在网上查阅了很多资料,并没有看到很清晰的解释,所以希望可以从K-Means与EM算法的关系,以及EM算法本身的收敛性证明中找到蛛丝 ...

  4. [Codeforces-div.1 24D] Broken robots

    [Codeforces-div.1 24D] Broken robots 试题分析 显然设\(f_{i,j}\)为到\((i,j)\)的期望步数,将转移表达式列出来. 首先自己跟自己的项消掉. 然后规 ...

  5. 51nod1674:区间的价值2(分治,利用&和|的收敛性)

    lyk拥有一个区间. 它规定一个区间的价值为这个区间中所有数and起来的值与这个区间所有数or起来的值的乘积. 例如3个数2,3,6.它们and起来的值为2,or起来的值为7,这个区间对答案的贡献为2 ...

  6. 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)

    [题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...

  7. [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论

    前言 支持向量机(Support Vector Machine,SVM)在70年代由苏联人 Vladimir Vapnik 提出,主要用于处理二分类问题,也就是研究如何区分两类事物. 本文主要介绍支持 ...

  8. 『Broken Robot 后效性dp 高斯消元』

    Broken Robot Description 你作为礼物收到一个非常聪明的机器人走在矩形板上.不幸的是,你明白它已经破碎并且行为相当奇怪(随机).该板由N行和M列单元组成.机器人最初位于第i行和第 ...

  9. CF24D Broken robot

    题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这 ...

随机推荐

  1. flask的httponly默认值为True

    如图flask的app.py里显示app的默认配置,httponly默认值为true,所以如果开发者不修改这个配置的话,攻击者是无法通过xss攻击读取浏览器cookie这部分信息的. Cookie:s ...

  2. EasyMvc入门教程-基本控件说明(5)小图标

    我们网页很多时候需要小图标来进行美化,EasyMvc默认提供了100多种常用小图标,您可以根据实际情况选择使用,请看下面的例子: @Html.Q().Ico().Type(EasyMvcHelper. ...

  3. GLSL纹理贴图 【转】

    转载:http://blog.csdn.net/hgl868/article/details/7872466 简单的纹理贴图(Simple Texture) 为了在GLSL中应用纹理,我们需要访问每个 ...

  4. 使用yum方式在centOS上安装mysql

    1.操作系统及MySQL版本 1.1 操作系统版本 CentOS release 6.5 (Final) 1.2 MySQL版本 mysql-5.1.73-3.el6_5.x86_64mysql-li ...

  5. awstats的安装和配置

    一.Awstats简介Awstats是一个免费非常简洁而且强大有个性的网站日志分析工具.它可以统计您站点的如下信息:一:访问量,访问次数,页面浏览量,点击数,数据流量等二:精确到每月.每日.每小时的数 ...

  6. hql小经验

    hql如果查了子对象的属性,那么hql不允许子对象为空!

  7. linux 内核(系统)、函数的理解、宏的程序调试

    1.操作系统 1.1.Linux 内核(系统)的组成的部分: 内核主要有:进程调度.内存管理.虚拟文件系统.网络接口和进程通信五个部分组成. (1)进程调度 进程调度是CPU对多个进程对CPU访问的调 ...

  8. VueJS循环语句:v-for

    v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名. HTML <!DOCTYPE html> <ht ...

  9. css3动画学习资料整理

    现在主流浏览器(先不管IE8,IE9吧),尤其是移动端浏览器基本都支持css3了,为了增强页面的表现力,css3动画必不可少了.这篇文章主要整理一下我在学习css3动画所查阅的一些好的资料,并附上两个 ...

  10. LinkedList 基本示例及源码解析

    目录 一.JavaDoc 简介 二.LinkedList 继承接口和实现类介绍 三.LinkedList 基本方法介绍 四.LinkedList 基本方法使用 五.LinkedList 内部结构以及基 ...