sdutoj 2623 The number of steps
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2623
The number of steps
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
Mary stands in a strange maze, the maze looks like a triangle(the first layer have one room,the second layer have two rooms,the third layer have three rooms …). Now she stands at the top point(the first layer), and the KEY of this maze is in the lowest layer’s leftmost room. Known that each room can only access to its left room and lower left and lower right rooms .If a room doesn’t have its left room, the probability of going to the lower left room and lower right room are a and b (a + b = 1 ). If a room only has it’s left room, the probability of going to the room is 1. If a room has its lower left, lower right rooms and its left room, the probability of going to each room are c, d, e (c + d + e = 1). Now , Mary wants to know how many steps she needs to reach the KEY. Dear friend, can you tell Mary the expected number of steps required to reach the KEY?
输入
输出
示例输入
3
0.3 0.7
0.1 0.3 0.6
0
示例输出
3.41
提示
来源
示例程序
分析:
第一行有一个位置,第二行两个,第三行三个......第n行n个。此时你在最左上角的位置,如果你左面没有位置,只能往左下和右下走,概率(a,b)。否则可以往左,左下和右下三个方向走,,概率(c,d,e)。让你求到达最左下角的期望。
先科普一下数学期望吧:
首先,来看下期望有啥基本的公式。对离散型随机变量x,其概率为p,有
对随机变量A、B,有
第二个式子表明了期望有线性的性质,简单理解就是期望之间可根据关系,简单运算(不严谨的理解)。 这就为我们解决一个期望问题,不断转化为解决另外的期望问题,最终转化到一个已知的期望上。
举一个求期望最简单的例子,见下图:
假设有个人在 1号节点处,每一分钟他会缘着边随机走到一个节点或者在原地停留,问他走到4号节点需要平均几分钟?
这是个简单的期望问题,我们用Ei(i=1,2,3,4) 表示从i号节点走到4号节点的数学期望值。根据题意对1号节点有
E1=(1/3)*E1+(1/3)*E2+(1/3)*E3+1 ①
表示 他下一分钟可以走到2或者3或在原地1,每个可能概率是1/3 ,注意是下一分钟,故要加上1.
同理我们对节点2,3同样可以列出:
E2=(1/3)*E1+(1/3)*E2+(1/3)*E4+1 ②
E3=(1/3)*E1+(1/3)*E3+(1/3)*E4+1 ③
那E4等于多少呢? 很明显
E4=0 ④
因为他就是要到点4
这样上面1234式其实就是组成了一组方程组,解方程组就可得出E1!!,用高斯消元,复杂度是O(n^3)
从上述例子,我们可总结出如何解决期望类问题,根据题意,表示出各个状态的期望(上例的Ei,1234),根据概率公式,列出期望之间的方程,解方程即可。
AC代码:
#include<stdio.h>
#include<string.h>
double dp[][];
int main()
{
int t;
while(scanf("%d",&t),t)
{
int i,j;
double a,b,c,d,e;
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
memset(dp,,sizeof(dp));
dp[t][]=;
for(i=;i<=t-;i++)
{
dp[t][i+]+=(dp[t][i]+);
}
for(i=t-;i>=;i--)
{
dp[i][]+=a*(dp[i+][]+)+b*(dp[i+][]+);
for(j=;j<=i;j++)
dp[i][j]+=c*(dp[i+][j]+)+d*(dp[i+][j+]+)+e*(dp[i][j-]+);
}
printf("%.2lf\n",dp[][]);
}
return ;
}
官方标程:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 1000
#define eps 1e-8
double Atex[MAXN][MAXN];
double a[], b[];
int all;
inline int dcmp(double d) {
return d < -eps ? - : d > eps;
} void gauss(int n, int m)
{
int r,c,i,j;
for(r=c=; r<n&&c<m; r++,c++)
{
for(i=r;i<n;i++)
if(dcmp(Atex[i][c])) break;
if(i==n)//{r--;continue;}
return;
if(i!=r) for(j=c;j<=m;j++) swap(Atex[i][j],Atex[r][j]);
for(i=r+;i<n;i++)
if(Atex[i][c]!=)
{
double temp=Atex[i][c]/Atex[r][c];
for(j=c;j<=m;j++)
Atex[i][j]-=Atex[r][j]*temp;
}
}
for(i=n-;i>=;i--)
{
Atex[i][m]/=Atex[i][i];
Atex[i][i]=;
for(j=i-;j>=;j--) Atex[j][m]-=Atex[i][m]*Atex[j][i];
}
return;
} void makemap(int n) {
memset(Atex, , sizeof(Atex));
all = (+n)*n/;
for (int i = ; i < all; i ++) {
Atex[i][i] = ;
Atex[i][all] = ;
}
int t = , tt;
for (int i = ; i < n-; i ++) {
tt = t + i+;
Atex[t][tt] = -*a[];
Atex[t][tt+] = -*a[];
for (int j = t+; j < tt; j ++) {
Atex[j][j+i+] = -*b[];
Atex[j][j+i+] = -*b[];
Atex[j][j-] = -*b[];
}
t = tt;
}
Atex[t][all] = ;
for (int i = t+; i < all; i ++) {
Atex[i][i-] = -;
}
} int main()
{
int n;
while(scanf("%d", &n) != EOF) {
if(n == ) break;
for (int i = ; i < ; i ++) {
scanf("%lf", &a[i]);
}
for (int i = ; i < ; i ++) {
scanf("%lf", &b[i]);
}
makemap(n);
gauss(all, all);
printf("%.2f\n", Atex[][all]);
}
return ;
}
sdutoj 2623 The number of steps的更多相关文章
- SDUT 2623 The number of steps (概率)
The number of steps Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Mary stands in a stra ...
- SDUT 2623:The number of steps
The number of steps Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Mary stands in a stra ...
- sdut2623--The number of steps(概率dp第一弹,求期望)
The number of steps Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 Mary stands in a st ...
- 13年山东省赛 The number of steps(概率dp水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud The number of steps Time Limit: 1 Sec Me ...
- [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...
- Minimum number of steps CodeForces - 805D(签到题)
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
- Codeforces Round #411 div 2 D. Minimum number of steps
D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...
- codeforce 804B Minimum number of steps
cf劲啊 原题: We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each ...
- Minimum number of steps 805D
http://codeforces.com/contest/805/problem/D D. Minimum number of steps time limit per test 1 second ...
随机推荐
- C语言break和continue
break和continue C语言中有有两种结束循环的关键字:break和continue #include <stdio.h> #include <stdlib.h> in ...
- Application Initialization Module for IIS 7.5
http://www.iis.net/downloads/microsoft/application-initialization IIS7.5也有Warm Up功能 让ASP.NET第一次Reque ...
- sencha做个简单的登录界面
很多人都在群里问要一个好看的登录界面,我表示很无奈,哪有好看的,每个人的要求不一样,要好看的只有自己做. 下面是我自己整理的一个通用版的登录界面,稍做修改,很容易能变成你想要的界面, 不说废话,直接上 ...
- Stereo Matching 立体匹配学习资料
Middlebury Stereo Evaluation Camera Calibration and 3D Reconstruction OpenCV学习笔记(18)双目测距与三维重建的OpenCV ...
- mysql中字段类型转换排序
表中字段server_id是varchar类型,现在我们查询数据时想以server_id排一下序,排序后的结果 select server_id from cardserver where game_ ...
- 2016HUAS暑假集训训练题 F - 简单计算器
Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运 ...
- 关于UGUI Image Sliced模式的一个BUG。
Unity4.6.2f1 在Android/IOS平台下,Image选择Sliced模式,并且对Sprite设置好Border后,会发现并没有按照预计的 情况进行拉伸. 搜了一下是因为Sprite的G ...
- 创建 PDO 实例并在构造函数中设置错误模式
PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 ...
- windows下安装redis以及测试
Window 下安装 下载地址:https://github.com/dmajkic/redis/downloads. 下载到的Redis支持32bit和64bit.根据自己实际情况选择,将64bit ...
- C# 常用结构
几种常用类的基本结构如下: public Size( double width, double height ) public Point( double x, double y) public Ve ...