Re: [閒聊] 每日leetcode

看板Marginalman作者 (神楽めあ的錢包)時間3月前 (2025/08/17 13:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1501/1548 (看更多)
837. New 21 Game 你版人都去C106, 剩我在寫這該死的東西 思路: k = 0 或是 k - 1 + maxPts < n 直接回傳1 再來就是dp + sliding window dp[i] 表示目前分數是i的機率 dp[i] = (dp[i-maxPts] + dp[i-maxPts+1] + ... + dp[i-1]) / maxPts 等式右邊那坨可以用sliding window, 不用每次都重加 然後注意 i > k後就別算了 接著dp[k] ~ dp[n]的總和就是答案 golang code func new21Game(n int, k int, maxPts int) float64 { if k == 0 || k-1+maxPts < n { return 1.0 } dp, l := make([]float64, n+1), 0 dp[0] = 1.0 prevSum, ans := 1.0, 0.0 for i := 1; i <= n; i++ { if i > l+maxPts && l < k { //注意 l>=k就不要扣了, 會多扣 prevSum -= dp[l] l++ } dp[i] = prevSum / float64(maxPts) if i < k { prevSum += dp[i] } else { ans += dp[i] } } return ans } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.215.25 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1755409809.A.496.html
文章代碼(AID): #1eeMsHIM (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1eeMsHIM (Marginalman)