CodeForces 24D Broken robot (概率DP)
2016-05-31 08:39
337 查看
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
output
input
output
[/code]
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; }
[/code]
相关文章推荐
- 团队冲刺2---个人工作总结七(5.31)
- Extjs中在panel或者一些容器中放置下拉框fieldLabel不显示解决办法
- 前端资源汇集
- linux基本命令
- C知识点整合
- 关于MYSQL安装时, start service失败解决
- linux学习之路——挂载和卸载文件系统,光盘,U盘
- Android异步消息处理之AsyncTask
- java web 第2天:jsp中java代码三种交互方式
- 第二阶段个人博客总结5
- 一步步开发自己的博客 .NET版(9、从model first替换成code first 问题记录)
- js中控制图片的循环播放
- CodeForces 24B F1 Champions(排序)
- CodeForces 24B F1 Champions(排序)
- 构建之法阅读笔记06
- 大话设计模式-第03章 拍摄UFO-单一职责原则
- 如何找出数组中只出现一次的数字
- 百度地图开发,实现鼠标悬浮事件以及点击事件
- CodeForces 24A Ring road(dfs)
- (十二)boost库之多线程高级特性