数据结构学习 jz60 n个骰子的点数

关键词:动态规划 滚动数组优化

这道题还是不难的,就是特别纠结要怎么优化这个存储空间以及动态规划的方法,因为我觉得这个方法好原始,最后决定不优化了。最后发现题解也是这个原始的样子,我就放心了。用时38min。

题目:

思路:

类似跳楼梯,一次可以跳1-6级。

dp状态:

dp[i][j]:第i次抛筛子,第j小的点数集合的概率。

转移方程:

dp[i][j]=(dp[i-1][j-1]+dp[i-1][j-2]+...+dp[i-1][j-6])*(1/6)【这里注意范围】

i-1次抛筛子的集合点数的概率*1/6

初始化:第一次抛骰子,所有点数的概率都是1/6

复杂度计算:

时间复杂度O(n^2)

空间复杂度O(n)

代码:

我的dp状态的长度是num*6+1,因为想要dp的索引对应点数的集合。

抛第i次的时候,最大的点数集合是i*6,最小的点数集合是i。

cpp 复制代码
class Solution {
public:
    vector<double> statisticsProbability(int num) {
        vector<double> dp(6*num+1,1.0/6);
        dp[0]=0;
        for(int i=2;i<=num;++i)
        {
            for(int j=i*6;j>=i;--j)
            {
                dp[j]=0;
                for(int z=1;z<=6;++z)
                {
                    if(j-z>=i-1&&j-z<=(i-1)*6)//从上一轮里面选
                        dp[j]+=dp[j-z];
                }
                dp[j]*=1.0/6;
            }
        }
        vector<double> res(num*5+1);
        int j=0;
        for(int i=num;i<=num*6;++i,++j)
        {
            res[j]=dp[i];
        }
        return res;
    }
};
相关推荐
望云山1906 分钟前
ESP32—S3学习--入门五个基础实验
嵌入式硬件·学习
renhongxia19 分钟前
学习基于数字孪生的质量预测与控制
人工智能·深度学习·学习·语言模型·自然语言处理·制造
开开心心_Every13 分钟前
重复图片智能清理工具:快速查重批量删除
java·服务器·开发语言·前端·学习·edge·powerpoint
wen__xvn16 分钟前
代码随想录算法训练营DAY15第六章 二叉树part03
数据结构·算法·leetcode
开开心心_Every22 分钟前
一键隐藏窗口到系统托盘:支持任意软件摸鱼
服务器·前端·python·学习·edge·django·powerpoint
无限进步_27 分钟前
【C语言&数据结构】二叉树链式结构完全指南:从基础到进阶
c语言·开发语言·数据结构·c++·git·算法·visual studio
烤麻辣烫33 分钟前
Java开发手册规则精选
java·开发语言·学习
AI视觉网奇34 分钟前
ue5.5 动画 选取 一段使用
笔记·学习·ue5
好奇龙猫39 分钟前
大学院-筆記試験練習:线性代数和数据结构(8)
数据结构·线性代数
世人万千丶39 分钟前
鸿蒙跨端框架Flutter学习day 1、变量与基本类型-智能家居监控模型
学习·flutter·ui·智能家居·harmonyos·鸿蒙·鸿蒙系统