HDU 3853

来源:互联网 发布:同步助手java 编辑:程序博客网 时间:2024/06/06 02:35


// 第一次做概率DP,根本不懂。。。看了题解还是不懂。尼马!!!!!!

//只是听人家说什么求概率要正推,求期望要逆推。。。尼马还是不懂!!!!

//于是找了个水题做了一个,特么的还是不懂!!!!

//这是个开始,,,慢慢来

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#include<stdio.h>

#include<string.h>
#include<math.h>
#define max 1000+5
#define eps 1e-10

struct node{
    double h,r,d;
}map[max][max];
double dp[max][max];
int r,c;

void solve(){
    for(int i=r;i>=1;i--){
        for(int j=c;j>=1;j--){
            if(i==r&&j==c){
                continue;
            }
            if(fabs(1-map[i][j].h)<eps){
                continue;
            }
            double res1=map[i][j].r*dp[i][j+1];
            double res2=map[i][j].d*dp[i+1][j];
            dp[i][j]=(res1+res2+1)/(1-map[i][j].h);
        }
    }
}

int main(){
    while(~scanf("%d%d",&r,&c)){
        memset(map,0,sizeof(map));
        for(int i=1;i<=r;i++){
            for(int j=1;j<=c;j++){
                node& t=map[i][j];
                scanf("%lf %lf %lf",&t.h,&t.r,&t.d);
            }
        }
        memset(dp,0,sizeof(dp));
        //dp[r][c]=0;
        solve();
        printf("%.3lf\n",2*dp[1][1]);
    }
}


原创粉丝点击