0
点赞
收藏
分享

微信扫一扫

剑指offer60:n个骰子的点数

cnlinkchina 2022-02-04 阅读 66

这题tql...看大佬学编程的一天

具体的暴力思路和动态规划可以参考下面的文章

力扣

这里给一个逆向推导的:

class Solution {
public:
    vector<double> dicesProbability(int n) {
        vector<double> dp(6, 1.0 / 6.0);
        for (int i = 2; i <= n; i++) {
            //i个骰子的和的情况有6*i-i+1种
            vector<double> tmp(5 * i + 1, 0);
            for (int j = 0; j < 5 * i + 1; j++) {
                for (int k = 0; k < 6; k++) {
                    //j-k>=0是保证f()
                    if (j - k >= 0 && j - k < dp.size()) {
                        tmp[j] += dp[j - k] / 6.0;
                    }
                }
            }
            dp = tmp;
        }
        return dp;
    }
};

其实看懂逆向推导的之后,正向的也很简单了:

class Solution {
public:
    vector<double> dicesProbability(int n) {
        vector<double> dp(6, 1.0 / 6.0);
        for (int i = 2; i <= n; i++) {
            vector<double> tmp(5 * i + 1, 0);
            for (int j = 0; j < dp.size(); j++) {
                for (int k = 0; k < 6; k++) {
                    tmp[j + k] += dp[j] / 6.0;
                }
            }
            dp = tmp;
        }
        return dp;
    }
};

作者:jyd
链接:https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/solution/jian-zhi-offer-60-n-ge-tou-zi-de-dian-sh-z36d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
举报

相关推荐

0 条评论