leetcode 飞机座位分配概率(c++实现)

  这题有点小绕,其实举个例子就很明显了:已知1个乘客f(1)时,第1位乘客坐在自己的座位上的概率概率是1;2个乘客f(2)时,第2位乘客坐在自己的座位上的概率概率是0.5;3个乘客f(3)时,就会分成以下三种情况:

  1. 乘客1坐在乘客1座位上,概率为f(1)=1
  2. 乘客1坐在乘客3座位上,概率为f(0)=0
  3. 乘客1坐在乘客2座位上,此时有乘客2、乘客3,座位1、座位3,要使乘客3坐在正确的座位上,就和f(2)的情况是一样的,即概率为f(2)=0.5

  那么f(3)=(0+1+0.5)/3,根据递推式得代码: f ( n ) = i = 1 n 1 f ( i ) n , f ( 1 ) = 1 f(n)=\frac {\sum_{i=1}^{n-1}f(i)}{n},f(1)=1

class Solution {
public:
    double nthPersonGetsNthSeat(int n) {
        vector<double> dp(n + 1);
        dp[1] = 1.0;
        double sum = 0.0;
        for(int i = 2; i <= n; ++i) {
            sum += dp[i - 1];
            dp[i] = sum / (double)i;
        }
        return dp[n];
    }
};
发布了27 篇原创文章 · 获赞 10 · 访问量 5008

猜你喜欢

转载自blog.csdn.net/l1l1l1l/article/details/102951963