愛麗絲參與乙個大致基於紙牌遊戲 「21點」 規則的遊戲,描述如下:
愛麗絲以 0 分開始,並在她的得分少於 k 分時抽取數字。 抽取時,她從 [1, w] 的範圍中隨機獲得乙個整數作為分數進行累計,其中 w 是整數。 每次抽取都是獨立的,其結果具有相同的概率。
當愛麗絲獲得不少於 k 分時,她就停止抽取數字。 愛麗絲的分數不超過 n 的概率是多少?
示例 1:
輸入:n = 10, k = 1, w = 10
輸出:1.00000
說明:愛麗絲得到一張卡,然後停止。
示例 2:
輸入:n = 6, k = 1, w = 10
輸出:0.60000
說明:愛麗絲得到一張卡,然後停止。
在 w = 10 的 6 種可能下,她的得分不超過 n = 6 分。
示例 3:
輸入:n = 21, k = 17, w = 10
輸出:0.73278
1. 0 <= k <= n <= 10000
2. 1 <= w <= 10000
3. 如果答案與正確答案的誤差不超過 10^-5,則該答案將被視為正確答案通過。
4. 此問題的判斷限制時間已經減少。
dp 即可,但 \(o(n^2)\) 會 tle。
p[i]
表示得到 i 的概率,有p[0] = 1
,然後列舉在 i 時抽到的值 j 即可,有p[i + j] += p[i] * 1.0 / w;
class solution else
if(i >= w)
s -= p[i - w];
}//for(auto i:p) cout << i << " ";cout
for(int i = 0; i < w && i + k <= n; ++i)
ans += p[i + k];
return ans;
}};
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...