新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

浙公网安备 33010602011771号