HDU 3853

本文深入探讨了概率动态规划的概念,并通过实例解析了正推与逆推的区别及应用,逐步引导读者掌握概率计算的核心技巧。


// 第一次做概率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]);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值