Leetcode837.新21点

目录

      • 题目
      • [算法标签: 数学, 概率, 动态规划](#算法标签: 数学, 概率, 动态规划)
      • 思路
      • 代码

题目

837. 新 21 点

算法标签: 数学, 概率, 动态规划

思路

定义状态表示为 f [ i ] f[i] f[i], 表示分数达到 i i i的时候的概率, 分析状态计算, 假设当前的分数是 i i i, 抽取到的牌得分数是 x x x, 那么当前状态就会转移到 f [ i + x ] f[i + x] f[i+x], 状态转移方程如下

d p [ i ] = 1 maxPts ( d p [ i + 1 ] + d p [ i + 2 ] + ⋯ + d p [ i + maxPts ] ) dp[i] = \frac{1}{\text{maxPts}} \left( dp[i+1] + dp[i+2] + \cdots + dp[i+\text{maxPts}] \right) dp[i]=maxPts1(dp[i+1]+dp[i+2]+⋯+dp[i+maxPts])

计算时间复杂度, 外层枚举分数, 内层也需要枚举分数, 总的时间复杂度来到了 O ( n 2 ) O(n ^ 2) O(n2), 时间复杂度过高, 需要进行优化, 推 i = i − 1 i = i - 1 i=i−1时的表达式

d p [ i − 1 ] = 1 maxPts ( d p [ i ] + d p [ i + 1 ] + ⋯ + d p [ i + maxPts - 1 ] ) dp[i - 1] = \frac{1}{\text{maxPts}} \left( dp[i] + dp[i+1] + \cdots + dp[i+\text{maxPts - 1}] \right) dp[i−1]=maxPts1(dp[i]+dp[i+1]+⋯+dp[i+maxPts - 1])

设 t = m a x P t s t = maxPts t=maxPts, f [ i ] = f [ i + 1 ] × t + f [ i + 1 ] − f [ i + t + 1 ] t f[i] = \frac {f[i + 1] \times t + f[i + 1] - f[i + t + 1]}{t} f[i]=tf[i+1]×t+f[i+1]−f[i+t+1], 整理后得到

f [ i ] = f [ i + 1 ] + f [ i + 1 ] − f [ i + t + 1 ] t f[i] = f[i + 1] + \frac {f[i + 1] - f[i + t + 1]} {t} f[i]=f[i+1]+tf[i+1]−f[i+t+1]

这样就将时间复杂度降低到 O ( n ) O(n) O(n)

代码

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>

using namespace std;

const int N = 2e4 + 10;

class Solution {
public:
    double new21Game(int n, int k, int maxPts) {
        if (k == 0) return 1.0;

        //当前分数是i, 并且分数不超过n的概率
        double f[N] = {0};
        for (int i = k; i <= n && i < k + maxPts; ++i) f[i] = 1.0;

        //计算当前分数是i再抽一张牌, 得分不超过n的概率
        f[k - 1] = 1.0 * min(n - k + 1, maxPts) / maxPts;

        for (int i = k - 2; i >= 0; --i) {
            f[i] = f[i + 1] + (f[i + 1] - f[i + maxPts + 1]) / maxPts;
        }

        return f[0];
    }
};
相关推荐
程序员zgh31 分钟前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
鲨莎分不晴42 分钟前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习
搞科研的小刘选手1 小时前
【ISSN/ISBN双刊号】第三届电力电子与人工智能国际学术会议(PEAI 2026)
图像处理·人工智能·算法·电力电子·学术会议
拉姆哥的小屋2 小时前
从混沌到秩序:条件扩散模型在图像转换中的哲学与技术革命
人工智能·算法·机器学习
Sammyyyyy2 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
Li.CQ2 小时前
SQL学习笔记(二)
笔记·sql·学习
sin_hielo2 小时前
leetcode 2110
数据结构·算法·leetcode
Jay20021112 小时前
【机器学习】33 强化学习 - 连续状态空间(DQN算法)
人工智能·算法·机器学习
panzer_maus3 小时前
归并排序的简单介绍
java·数据结构·算法
獭.獭.3 小时前
C++ -- STL【unordered_set和unordered_map的使用】
c++·stl·unordered_map·unordered_set