关闭

CodeForces 24D Broken robot (概率DP)

标签: CodeFoces 24DBroken robot概率DP
436人阅读 评论(0) 收藏 举报
分类:
D. Broken robot
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

You received as a gift a very clever robot walking on a rectangular board. Unfortunately, you understood that it is broken and behaves rather strangely (randomly). The board consists of N rows and Mcolumns of cells. The robot is initially at some cell on the i-th row and the j-th column. Then at every step the robot could go to some another cell. The aim is to go to the bottommost (N-th) row. The robot can stay at it's current cell, move to the left, move to the right, or move to the cell below the current. If the robot is in the leftmost column it cannot move to the left, and if it is in the rightmost column it cannot move to the right. At every step all possible moves are equally probable. Return the expected number of step to reach the bottommost row.

Input

On the first line you will be given two space separated integers N andM (1 ≤ N, M ≤ 1000). On the second line you will be given another two space separated integers i and j (1 ≤ i ≤ N, 1 ≤ j ≤ M) — the number of the initial row and the number of the initial column. Note that, (1, 1) is the upper left corner of the board and (N, M) is the bottom right corner.

Output

Output the expected number of steps on a line of itself with at least 4digits after the decimal point.

Examples
input
10 10
10 4
output
0.0000000000
input
10 14
5 14
output
18.0038068653
概率DP
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <vector>

using namespace std;
int n,m;
int x,y;
double dp[1005][1005];
int main()
{
    scanf("%d%d",&n,&m);
    scanf("%d%d",&x,&y);
    double p1=1.0/3;
    double p2=1.0/4;
    double p3=1.0/2;
    for(int i=n-1;i>=x;i--)
    {
        for(int t=0;t<=50;t++)
        {
            for(int j=1;j<=m;j++)
            {
                if(m==1)
                    dp[i][j]=(dp[i+1][j]*p3+1)/(1-p3);
                else if(j==1)
                    dp[i][j]=(dp[i][j+1]*p1+dp[i+1][j]*p1+1)/(1-p1);
                else if(j==m)
                    dp[i][j]=(dp[i][j-1]*p1+dp[i+1][j]*p1+1)/(1-p1);
                else
                    dp[i][j]=(dp[i][j+1]*p2+dp[i][j-1]*p2+dp[i+1][j]*p2+1)/(1-p2);
            }
        }
    }
    printf("%.6f\n",dp[x][y]);
    return 0;
}


0
1
查看评论

codeforce 24D Broken robot—概率DP—conquersea博客

D. Broken robot                                       ...
  • Greaterlee
  • Greaterlee
  • 2016-07-24 15:48
  • 530

Broken robot CodeForces - 24D 期望dp

题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 先讲坑点,1原地停留算一步,2要考虑机器人在同一层楼无限走路,3,m=1情况特殊考虑; 思路:因为...
  • zhjcezh
  • zhjcezh
  • 2017-08-12 13:35
  • 61

CodeForces 24D Broken robot(三对角矩阵)

题意:给你一个n×m的矩阵,以及起点i,j,问你走到最后一行的步数期望,可以向下左右(当然不能跃出矩阵)或者在当前位置不动,也算一步。 解法:其实这题我们能很快写出递推式。最后一行的每个期望都为0,我们靠这个往上推。例如当m等于6时。  x1 x2 x3 x4 x5 x6 ...
  • u012962816
  • u012962816
  • 2015-04-05 23:41
  • 755

codeforces 183d(期望概率dp)

我还是在noip模拟看到这题,看起来就是dp,然而考试时并想不到正解,打暴力居然MLE。dp又不会做…… 然后我用了一个上午才YY了出来。 题面 题目描述 你要给N个人准备礼物——T-shirt!但是你不知道他们的尺码……总共有M种尺码,编号从1到M。虽然你不记得每个人准确的...
  • q582116859
  • q582116859
  • 2017-09-14 20:11
  • 181

Broken robot (概率dp)

点击打开链接 这是一道概率dp 题目意思就是给你一个你n,m大小的方格,再给你输入当前位置,每次机器人只能向下,向左,向右移动一格,或者原地不动,类似于象棋里面小兵的移动。 问平均需要多少次移动,能使机器人到达最后一行 例如样例 10 10 10 4 机器人已在最后一行,所以需要移动步...
  • Draven__
  • Draven__
  • 2017-07-24 13:32
  • 111

CodeForces 24D Broken robot (三对角矩阵消元)

#include #include #include #include #include #include using namespace std; #define N 1020 int n, m, x, y; double dp[N][N]; void ele(double...
  • u013654696
  • u013654696
  • 2016-07-01 15:45
  • 318

CodeForces 24D Broken robot(概率dp+三对角矩阵)

题意:现在有一个迷宫,在任何一个位置向各个方向移动的概率(可以不动)是相同的,问从起点到达最后一行的期望回合数是多少。 思路:概率dp,对于当前位置(i,j),有dp[i][j] = 1 + dp[I][j-1]/4 + dp[I][j]/4 + dp[I][j+1] /4, 注意这个...
  • u014664226
  • u014664226
  • 2016-06-08 20:04
  • 467

[Codeforces540D]Bad Luck Island(概率dp)

题目描述传送门 题意:有r个石头、s个剪刀、p个布,每一次两个人随机碰上,输的人死掉,问只剩下每一种的概率。题解令f(i,j,k)表示三种人分别有i个,j个,k个时到初始的概率 三个人分别算 注意这道题不能倒推代码#include<algorithm> #include<cs...
  • Clove_unique
  • Clove_unique
  • 2017-03-14 19:55
  • 196

Codeforces 768D Jon and Orbs【概率Dp】

D. Jon and Orbs time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Jon...
  • mengxiang000000
  • mengxiang000000
  • 2017-05-16 12:08
  • 187

Codeforces 16E Fish dp(概率)

题目链接:点击打开链接 题意:池中有n条鱼,每天会有两条鱼相遇,任意两条鱼两两相遇的概率相等,如果两条鱼相遇,其中一条一定会被吃掉,给出所有两两相遇时吃与被吃的概率,求每条鱼存活的概率。 状态转移方程: dp[s2]=∑(win[j][i]*dp[s]/C[num][2]);...
  • yskyskyer123
  • yskyskyer123
  • 2016-07-05 10:29
  • 196
    个人资料
    • 访问:131857次
    • 积分:4668
    • 等级:
    • 排名:第7439名
    • 原创:349篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    最新评论