hdu 3853 LOOPS 概率dp入门题

状态转移方程很好想,除的时候注意分母

dp[i][j]=1+dp[i][j+1]*map[i][j][2]+dp[i+1][j]*map[i][j][3]+dp[i][j]*map[i][j][1];

#include<iostream>
#include<cstdio>
#include<memory.h>
using namespace std;
#define M 1005
double map[M][M][4],e[M][M];
int main(){
    int m,n;
    while(~scanf("%d%d",&n,&m)){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                for(int k=1;k<=3;k++)
                    scanf("%lf",&map[i][j][k]);
            }
        }
        memset(e,0,sizeof(e));
        for(int i=n;i>0;i--){
            for(int j=m;j>0;j--){
                if(i==n&&j==m) continue;
                if(1-map[i][j][1]==0) continue;//注意分母
                e[i][j]=(1+e[i][j+1]*map[i][j][2]+e[i+1][j]*map[i][j][3])/(1-map[i][j][1]);
            }
        }
        printf("%.3lf\n",2*e[1][1]);
    }
}


你可能感兴趣的:(hdu 3853 LOOPS 概率dp入门题)