您的位置:首页 > 其它

【专题】概率dp-求期望

2012-10-28 17:33 232 查看
求期望两种题型。

1.概率dp

2.高斯消元

这里有一篇很好的文章:http://kicd.blog.163.com/blog/static/126961911200910168335852/

还有kb大神的专题:/content/3596333.html

然后是我AC的三道小题。全部是概率dp

poj-2096

dp[i][j]代表i,j到n,s的期望步数;

(i*(s-j)/(n*s))*dp[i][j+1]中,i/(n*s)代表在i中取一个的概率,(s-j)/(n*s)代表在s-j中取一个,放到j+1中的概率.dp[i][j+1]同时还代表取到i个n及j+1个s的状态。

'='代表dp[i][j]前一步的所有期望步数*概率的和+1步。

View Code

#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define R 1005
#define C 1005
const double eps=1e-5;
using namespace std;
double dp[R][C];
int r,c;
struct P{
double x,y,z;
}p[R][C];
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&r,&c)!=EOF){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
scanf("%lf%lf%lf",&p[i][j].x,&p[i][j].y,&p[i][j].z);
}
}
memset(dp,0,sizeof(dp));

dp[r][c]=0;
for(int i=r;i>=1;i--){
for(int j=c;j>=1;j--){
if(i==r && j==c) continue;
if(fabs(1-p[i][j].x)<eps) continue;
dp[i][j]=(p[i][j].y*dp[i][j+1]+p[i][j].z*dp[i+1][j]+2.0)/(1.0-p[i][j].x);
}
}
/*for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
printf("%.3lf ",dp[i][j]);
}
printf("\n");
}*/
printf("%.3lf\n",dp[1][1]);
}
return 0;
}


剑指杭州。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: