日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 837. 新21点(动态规划)

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 837. 新21点(动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題
      • 2.1 暴力超時
      • 2.2 優化

1. 題目

愛麗絲參與一個大致基于紙牌游戲 “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 = 106 種可能下,她的得分不超過 N = 6 分。示例 3: 輸入:N = 21, K = 17, W = 10 輸出:0.73278提示: 0 <= K <= N <= 10000 1 <= W <= 10000 如果答案與正確答案的誤差不超過 10^-5,則該答案將被視為正確答案通過。 此問題的判斷限制時間已經減少。

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/new-21-game
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

2.1 暴力超時

  • 每個位置等于它前面w個位置以 1/w的該跳過來的概率值和
  • 105 / 146 個通過測試用例
9811 # 超時 8890 7719 class Solution { public:double new21Game(int N, int K, int W) {vector<double> dp(N+1, 0.0);dp[0] = 1.0;int i, wi;for(i = 0; i < K; ++i){for(wi = 1; wi <= W; ++wi){if(i+wi <= N)dp[i+wi] += dp[i]/W;}}double ans = 0.0;for(i = K; i <= N; ++i)ans += dp[i];return ans;} };

2.2 優化

  • 每個位置 i 之前的W個位置(相當于滑動窗口)的概率之和prob,到達 i 的的概率為 prob/W
class Solution { public:double new21Game(int N, int K, int W) {vector<double> dp(N+1, 0.0);if(K == 0 || N >= K + W) return 1.0;//肯定不會超出Ndp[0] = 1;double prob = 1.0;//停在 i前面 w個位置的概率之和, 初值在0位置概率為1int i;for(i = 1; i < K; ++i)//小于K時,可以繼續,w個前綴可以加上本次的概率{if(i <= W){dp[i] = prob/W;//前面所有的位置都可以到此處,每個位置乘以1/wprob += dp[i];//前綴概率和,+本次}else //超過w個了{dp[i] = (prob-dp[i-W-1])/W;//不在窗口內的,不能到i處了,需要減去prob += dp[i] - dp[i-W-1];//前綴+本次,-不在窗口內的}}for( ; i >= K && i <= N; ++i)// >= K 了, 不能再走了,不加本次的概率{if(i <= W)dp[i] = prob/W;else{dp[i] = (prob-dp[i-W-1])/W;prob -= dp[i-W-1];//不加本次的概率,在窗口w外的減去}}for(i = K, prob = 0.0; i <= N; ++i)prob += dp[i];return prob;} };

4 ms 9.4 MB

總結

以上是生活随笔為你收集整理的LeetCode 837. 新21点(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。