新21点

 

 

 1 //爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下: 
 2 //
 3 // 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次
 4 //抽取都是独立的,其结果具有相同的概率。 
 5 //
 6 // 当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少? 
 7 //
 8 // 
 9 //
10 // 示例 1: 
11 //
12 // 输入:N = 10, K = 1, W = 10
13 //输出:1.00000
14 //说明:爱丽丝得到一张卡,然后停止。 
15 //
16 // 示例 2: 
17 //
18 // 输入:N = 6, K = 1, W = 10
19 //输出:0.60000
20 //说明:爱丽丝得到一张卡,然后停止。
21 //在 W = 10 的 6 种可能下,她的得分不超过 N = 6 分。 
22 //
23 // 示例 3: 
24 //
25 // 输入:N = 21, K = 17, W = 10
26 //输出:0.73278 
27 //
28 // 
29 //
30 // 提示: 
31 //
32 // 
33 // 0 <= K <= N <= 10000 
34 // 1 <= W <= 10000 
35 // 如果答案与正确答案的误差不超过 10^-5,则该答案将被视为正确答案通过。 
36 // 此问题的判断限制时间已经减少。 
37 // 
38 // Related Topics 动态规划 
39 // 👍 230 👎 0
40 
41 
42 //leetcode submit region begin(Prohibit modification and deletion)
43 class Solution {
44     public double new21Game(int N, int K, int W) {
45         if(K == 0){return 1.0;}
46         double [] dp = new double[K+W];//点和数最大为K-1+W
47         for(int i = K; i < K + W && i <= N; i++){
48             dp[i] = 1.0;
49         }
50         dp[K-1] = 1.0*Math.min(N-K+1,W)/W;//点数和不可能超过K-1+W,所以大于K-1+W的情况应该舍去
51         for(int i = K-2; i >= 0; i--){
52             dp[i] = dp[i+1] + (dp[i+1]-dp[i+W+1])/W;
53         }
54         return dp[0];
55     }
56 }
57 //leetcode submit region end(Prohibit modification and deletion)

一件事重复做都没结果的时候,只想刷刷题/_\

2020/09/12

posted @ 2020-09-12 17:39  雨下_整夜  阅读(181)  评论(0)    收藏  举报