package main;
/**
* 有 n 位乘客即將登機(jī),飛機(jī)正好有 n 個(gè)座位。第一位乘客的票丟了,他隨便選了一個(gè)座位坐下。
*
* 剩下的乘客將會(huì):
*
* 如果他們自己的座位還空著,就坐到自己的座位上,
*
* 當(dāng)他們自己的座位被占用時(shí),隨機(jī)選擇其他座位
* 第 n 位乘客坐在自己的座位上的概率是多少?
*
*
*
* 示例 1:
*
* 輸入:n = 1
* 輸出:1.00000
* 解釋:第一個(gè)人只會(huì)坐在自己的位置上。
* 示例 2:
*
* 輸入: n = 2
* 輸出: 0.50000
* 解釋:在第一個(gè)人選好座位坐下后,第二個(gè)人坐在自己的座位上的概率是 0.5。
*
*
* 提示:
*
* 1 <= n <= 10^5
*
* 來源:力扣(LeetCode)
* 鏈接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability
* 著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
*/
public class AirplaneSeatAssignmentProbability {
public static void main(String[] args) {
System.out.println("最后一個(gè)人坐自己位置概率為:"+ownSeat(4));
}
private static double ownSeat(int n) {
//1、判斷是否滿足動(dòng)態(tài)規(guī)劃
//2、確定子問題參數(shù)、界定和計(jì)算順序
//概率問題取反,求1-最后一個(gè)人位置被占用的概率。輸入n
//3、初始值以及追蹤數(shù)組以及遞推函數(shù)
if (n==1) return 1;
if (n==2) return 0.5;
double[] dp = new double[n];
dp[0]=1;
dp[1]=0.5;
//找規(guī)律(求第n個(gè)人座位被占用概率)
//n=3 a、1占用3,2占用2,3占用1 1/3 ok
// b、1占用自己,2占用自己,3占用自己 1/3 no
// c、1占用2,2占用1,3占用自己 1/3*1/2 no
// d、1占用2,2占用3,3占用1 1/3*1/2 ok
// 占用概率 1-1/2=0.5
//n=4 a、1占用4,2占用2,3占用3 4占用1 1/4 ok
// b、1占用1,2占用2,3占用3 4占用4 1/4 no
// c、1占用2,2占用1,3占用3 4占用4 1/4*1/3 no
// d、1占用2,2占用3,3占用1 4占用4 1/4*1/3*1/2 no
// e、1占用2,2占用4,3占用3 4占用1 1/4*1/3 ok
// f、1占用2,2占用3,3占用4 4占用1 1/4*1/3*1/2 ok
// f、1占用3,2占用2,3占用1 4占用4 1/4*1/2 no
// f、1占用3,2占用2,3占用4 4占用1 1/4*1/2 ok
// 占用概率 1-1/4-1/4*1/3-1/4*1/3*1/2-1/4*1/2=0.5
//結(jié)論:a、一下子占用n 概率至少1/3 b、1若占用自己,必然不會(huì)占用n c、1若占用其他位置,則子問題拋給其他人開始
//1/n*(歷代相加)
for (int i = 3; i <= n; i++) {
dp[i-1]=1.0/i*(dp[i-2]*(i-1)+dp[i-2]);//化簡以后發(fā)現(xiàn)除1外一直0.5
}
return 1-dp[n-1];
}
}
動(dòng)態(tài)規(guī)劃-飛機(jī)座位分配概率
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。