CodeForces 24D Broken robot (概率DP)

原创 2016年05月31日 08:39:32
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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

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

D. Broken robot                                       ...

D. Broken robot DP求期望

D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes i...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Codeforces Round #301 (Div. 2) -- D. Bad Luck Island (概率DP)

D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes ...

Codeforces 518D Ilya and Escalator【概率dp】

D. Ilya and Escalator time limit per test 2 seconds memory limit per test 256 megabytes i...

CodeForces 148D Bag of mice(概率DP )

题意:原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠。谁先抓到白色老鼠谁就赢。 王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。 每次抓老鼠和跑出来的老鼠都是随机的。 如果两...

CodeForces 148D Bag of mice(概率DP)

D. Bag of mice The dragon and the princess are arguing about what to do on the New Year's Eve. ...

codeforces 540 D. Bad Luck Island (概率dp)

D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes ...

Codeforces Round #301 (Div. 2)---D. Bad Luck Island(概率dp)

The Bad Luck Island is inhabited by three kinds of species: r rocks, s scissors and p papers. At som...

CodeForces - 540D Bad Luck Island (概率dp)

D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes ...

Codeforces 148D Bag of mice (概率dp)

Codeforces 148D Bag of mice (概率dp)
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)