文章目录

  • 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 = 10 的 6 种可能下,她的得分不超过 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点(动态规划)相关推荐

  1. Java实现 LeetCode 837 新21点(DP)

    837. 新21点 爱丽丝参与一个大致基于纸牌游戏 "21点" 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字. 抽取时,她从 [1, W] 的范 ...

  2. leetcode - 837. 新21点

    爱丽丝参与一个大致基于纸牌游戏 "21点" 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字. 抽取时,她从 [1, W] 的范围中随机获得一个整数 ...

  3. [Leedcode][JAVA][第837题][新21点][动态规划][数学]

    [问题描述][中等] 爱丽丝参与一个大致基于纸牌游戏 "21点" 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字. 抽取时,她从 [1, W] 的范 ...

  4. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

    LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入 ...

  5. 八十五、Python | Leetcode数据结构之图和动态规划算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  6. random_state的值如何选_算法萌新如何学好动态规划(3)

    本文是「动态规划」系列文章的第三篇,作为 算法萌新如何学好动态规划(2) 的一个延伸.本篇文章将主要聚焦于动态规划经典模型 -- 背包问题的讲解. 背包问题属于线性 DP 模型,之所以单独拎出来讲,主 ...

  7. 【leetcode刷题笔记】动态规划

    #[leetcode刷题笔记]动态规划 石子游戏 public boolean stoneGame(int[] piles) {int N = piles.length;// dp[i][j] is ...

  8. leetcode算法题--新21点★

    原题链接:https://leetcode-cn.com/problems/new-21-game/ 1.递归 double new21Game(int N, int K, int W) {if (K ...

  9. [leetcode] 72. 编辑距离(二维动态规划)

    72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...

最新文章

  1. Java知多少(29)覆盖和重载
  2. 管理表空间和数据文件——维护表空间——改变表空间的读写状态和改变表空间名称...
  3. linux从指定网卡scp文件出去,Linux下nc或scp命令来实现文件传输
  4. JPA和Hibernate的关系
  5. Arduino可穿戴开发入门教程LilyPad介绍
  6. 07-01-安装-Exchange Server 2019 on Win 2019 Core
  7. javascript --- 异步工作流的动态排队技术
  8. Java操作MongoDB之mongodb-driver
  9. js中避免函数名和变量名跟别人冲突
  10. vs 中使用32 位mysql_【转载】VS中MFC连接MySQL由于系统不同位(32/64)引起的错误:无法解析的外部符号 _mysql_init@4、_mysql_query...
  11. .net core 创建桌面应用程序(极简流程)
  12. vite 构建vue3 项目配置文件的详情配置
  13. vit transformer中的cls_token
  14. over()分析函数
  15. 牛逼的黑客也得找工作,他们靠的是黑掉公司网站?
  16. element-ui表格求和求平均数
  17. 未明学院:从国企联通到金融科技随手记,学长告诉你国企和互联网私企差别有多大?
  18. 5G智慧灯杆网关实现“一杆多用”
  19. 【小白破解电脑密码】忘记电脑开机密码了,怎么办?
  20. mysql 根据分数分等级_数分面试-SQL篇

热门文章

  1. appsettings 连接oracle数据库,ABP .net core集成访问Oracle数据库
  2. python会不会出4_无极4网人生苦短,Python会不会被取代?国外网友
  3. python seaborn boxplot_python - 如何将文本框添加到Seaborn Boxplot? - 堆栈内存溢出
  4. python3.8 实现鼠标自动移动_“新生报到”!【移动机器人 HD-1500】负载1500kg,实现了重型货物运输的自动化...
  5. JAVA开发工具下载
  6. Android dumpsys命令详细使用
  7. Spring系列(六) Spring Web MVC 应用构建分析
  8. BootStrap 用法
  9. 汉字转UNICODE?
  10. 从没想过会有一个这样的机会|大疆招聘