float caculate(int Pos, int Step, vector<vector<float>> &P) { float Pleft = 0, Pright = 0 ; /*步数走完肯定不会掉下去*/ if( Pos >= 0 && Pos <= 60 && Step == 0) { P[Pos][Step] = 1; return P[Pos][Step]; } /*越界肯定会掉下去*/ if(Pos < 0 || Pos > 60) { return 0; } /*由于会算很多组,算过了就不用再算了,不等于初始值就代表算过了*/ if(P[Pos][Step] > -0.5 ) { return P[Pos][Step]; } /*在某一位置不会掉落的概率 = 向左走的概率(1/2) * 左边位置不会掉落的概率 + 向右走的概率(1/2) * 右边位置不会掉落的概率 */ Pleft = (1/2) * caculate(Pos - 1, Step - 1, P); Pright = (1/2) * caculate(Pos + 1, Step - 1, P); P[Pos][Step] = Pleft + Pright; return P[Pos][Step]; }
点赞 评论

相关推荐

点赞 评论 收藏
转发
牛客网
牛客企业服务