LeetCode 837 New 21 Game 新21点

链接: LeetCode 837 题目.

链接: 题目详细参考学习博客.

Tip:本文章用于留存记忆
class Solution {
public:///设最终分数为x, x 属于闭区间[k,k + w - 1]
    double new21Game(int N, int K, int W) {///开始分为0, k = 0, 则一次都没有抽 分数一定不超过n
        if (K == 0 || N >= K + W) return 1; ///当 n > x(max) 分数一定不超过n。
        if (N < K) return 0; ///分数最终到n < x(min) 分数一定超过n。
        vector<double> dp(N + 1);
        double res = 0, sum = 0; /// sum递推区间和(dp[i - 1] ... dp[i - w]), res只需要累加[k, n]的概率
        for (int i = 1; i <= N; ++i) {
            dp[i] = i <= W ? (sum + 1.0) / W : sum / W;
            if (i < K) sum += dp[i]; ///还可以继续抽分,当前抽分由前面的作为出发点
            else res += dp[i]; ///不能抽分,加上满足题意区间[k, n]的概率
            if (i > W) sum -= dp[i - W]; ///减去i + 1递推时的非法的来源
        } ///sum 始终存分数可通过+ [1, W]递推到当前分数点的前区间和
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值