当前位置: 首页 > news >正文

公司网站做二维码网址/查网站域名

公司网站做二维码网址,查网站域名,地方门户信息网站建设方案,个人网站备案 网站服务内容题目链接 Leetcode.1223 掷骰子模拟 Rating : 2008 题目描述 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1…

题目链接

Leetcode.1223 掷骰子模拟 Rating : 2008

题目描述

有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。

不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始编号)。

现在,给你一个整数数组 rollMax和一个整数 n,请你来计算掷 n次骰子可得到的不同点数序列的数量。

假如两个序列中至少存在一个元素不同,就认为这两个序列是不同的。由于答案可能很大,所以请返回 模 10^9 + 7之后的结果。

示例 1:

输入:n = 2, rollMax = [1,1,2,2,2,3]
输出:34
解释:我们掷 2 次骰子,如果没有约束的话,共有 6 * 6 = 36 种可能的组合。但是根据 rollMax 数组,数字 1 和 2 最多连续出现一次,所以不会出现序列 (1,1) 和 (2,2)。因此,最终答案是 36-2 = 34。

示例 2:

输入:n = 2, rollMax = [1,1,1,1,1,1]
输出:30

示例 3:

输入:n = 3, rollMax = [1,1,1,2,2,3]
输出:181

提示:

  • 1<=n<=50001 <= n <= 50001<=n<=5000
  • rollMax.length==6rollMax.length == 6rollMax.length==6
  • 1<=rollMax[i]<=151 <= rollMax[i] <= 151<=rollMax[i]<=15

分析:

使用 动态规划 的方式求解。

我们定义 f(i,j,times)f(i,j,times)f(i,j,times) 为投掷了 i次骰子,并且第 i个骰子的点数是 j,且这个 j的连续出现次数是 times的不同序列数量。

按照定义,最终返回的结果为 f(n,1,1)+f(n,1,2)+...f(n,1,rollMax[0])...f(n,2,1)+f(n,2,2)...+f(n,2,rollMax[1]+...f(n,6,rollMax[5])f(n,1,1) + f(n,1,2) + ...f(n,1,rollMax[0])...f(n,2,1)+f(n,2,2)...+f(n,2,rollMax[1] + ...f(n,6,rollMax[5])f(n,1,1)+f(n,1,2)+...f(n,1,rollMax[0])...f(n,2,1)+f(n,2,2)...+f(n,2,rollMax[1]+...f(n,6,rollMax[5])

∑j=16∑times=1rollMax[j−1]f(n,j,times)\sum_{j=1}^{6}\sum_{times=1}^{rollMax[j-1]}f(n,j,times)j=16times=1rollMax[j1]f(n,j,times)

状态转移:

  • 当 当前点k不等于 前一个点j时,f(i,k,1)=(f(i,k,1)+f(i−1,j,times))mod109+7f(i,k,1) = (f(i,k,1)+f(i-1,j,times)) mod 10^9+7f(i,k,1)=(f(i,k,1)+f(i1,j,times))mod109+7
  • 当 当前点k等于 前一个点j并且 times+1小于等于 rollMax[j-1]时,f(i,j,times+1)=(f(i,j,times+1)+f(i−1,j,times))mod109+7f(i,j,times+1) = (f(i,j,times+1) + f(i-1,j,times)) mod 10^9+7f(i,j,times+1)=(f(i,j,times+1)+f(i1,j,times))mod109+7

时间复杂度:O(n∗36∗15)O(n * 36 * 15)O(n3615)

C++代码:

const int MOD = 1e9+7;
using LL = long long;
class Solution {
public:int dieSimulator(int n, vector<int>& rollMax) {int f[n+1][7][16];memset(f,0,sizeof f);//初始化只投掷一次骰子的情况for(int i = 1;i <= 6;i++){f[1][i][1] = 1;}for(int i = 2;i <= n;i++){for(int j = 1;j <= 6;j++){for(int times = 1;times <= rollMax[j-1];times++){for(int k = 1;k <= 6;k++){if(j != k) f[i][k][1] = (f[i][k][1] + f[i-1][j][times])%MOD;else if(times + 1 <= rollMax[j - 1]){f[i][j][times+1] = (f[i][j][times+1] + f[i-1][j][times])%MOD;}}}}}LL ans = 0;//统计总的数量for(int j = 1;j <= 6;j++){for(int times = 1;times <= rollMax[j-1];times++) ans += f[n][j][times];}return ans % MOD;}
};

Java代码:

class Solution {private final int MOD = 1000_000_000+7;public int dieSimulator(int n, int[] rollMax) {int [][][] f = new int[n+1][7][16];for(int i = 1;i <= 6;i++){f[1][i][1] = 1;}for(int i = 2;i <= n;i++){for(int j = 1;j <= 6;j++){for(int times = 1;times <= rollMax[j-1];times++){for(int k = 1;k <= 6;k++){if(j != k) f[i][k][1] = (f[i][k][1] + f[i-1][j][times])%MOD;else if(times + 1 <= rollMax[j - 1]){f[i][j][times+1] = (f[i][j][times+1] + f[i-1][j][times])%MOD;}}}}}long ans = 0;for(int j = 1;j <= 6;j++){for(int times = 1;times <= rollMax[j-1];times++) ans += f[n][j][times];}return (int)(ans % MOD);}
}

相关文章:

Leetcode.1223 掷骰子模拟

题目链接 Leetcode.1223 掷骰子模拟 Rating &#xff1a; 2008 题目描述 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。 不过我们在使用它时有个约束&#xff0c;就是使得投掷骰子时&#xff0c;连续 掷出数字 i 的次数不能超过 rollMax[i]&#xff08;i 从 1…...

数据分析到底该怎么学呢?讲真,真不难!

这几年&#xff0c;“数据分析”是很火啊&#xff0c;在这个数据驱动一切的时代&#xff0c;数据挖掘和数据分析就是这个时代的“淘金”&#xff0c;懂数据分析、拥有数据思维&#xff0c;往往成了大厂面试的加分项。 比如通过数据分析&#xff0c;我们可以更好地了解用户画像…...

活动星投票紫砂新青年制作一个投票活动

“紫砂新青年”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥…...

Git | 在IDEA中使用Git

目录 一、在IDEA中配置Git 1.1 配置Git 1.2 获取Git仓库 1.3 将本地项目推送到远程仓库 1.4 .gitignore文件的作用 二、本地仓库操作 2.1 将文件加入暂存区 2.2 将暂存区的文件提交到版本库 2.3 查看日志 三、远程仓库操作 3.1 查看和添加远程仓库 3.2 推送至远程仓…...

< Linux >:Linux 进程概念 (4)

目录 五、孤儿进程 六、进程优先级 6.1、基本概念 6.2、查看时实系统进程 6.3、PRI and NI 七、其他概念 四、X 状态&#xff1a;死亡状态 所谓进程处于 X 状态(死亡状态)代表的就是该进程已经死亡了&#xff0c;即操作系统可以随时回收它的资源(操作系统也可以…...

七、Java框架之MyBatisPlus

黑马课程 文章目录1. MyBatisPlus入门1.1 MyBatisPlus入门案例步骤1&#xff1a;创建spring boot工程步骤2&#xff1a;配置application.yml步骤3&#xff1a;创建数据库表&#xff08;重点&#xff09;步骤4&#xff1a;编写dao层步骤5&#xff1a;测试1.2 标准数据层开发标准…...

C语言柔性数组

目录什么是柔性数组柔性数组的使用什么是柔性数组 柔性数组是在C99中定义的 结构体的最后一个元素允许是未知大小的数组&#xff0c;这就叫柔性书组 柔性数组的长度可以写成0&#xff0c;也可以不规定数组长度 下面两种写法都是正确的 struct S { int i; int a[0];//柔性数…...

支付功能测试用例

Author&#xff1a;ChatGPT用例设计下面是一些支付功能测试用例&#xff1a;账户余额检查&#xff1a;测试用户的账户余额是否准确。支付方式选择&#xff1a;测试用户可以使用的支付方式&#xff0c;包括信用卡、借记卡、电子钱包等。支付金额确认&#xff1a;测试用户输入的支…...

牛客网Python篇数据分析习题(一)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…...

【C语言】“指针类型”与“野指针”

文章目录一、指针是什么❔二、指针和指针类型1.指针-整数2.指针解引用三.野指针1.引起野指针的原因2.如果避免野指针完结一、指针是什么❔ 指针也就是 内存地址 &#xff0c;在计算机上我们访问数据需要通过内存地址来访问&#xff0c;在C语言中&#xff0c;指针变量是用来存放…...

Linux:软链接和硬链接的理解

Linux通过命令行创建快捷方式使用的命令是ln&#xff0c;这里就涉及到了软链接和硬链接&#xff0c;确实有些不好理解&#xff0c;如果你也一样&#xff0c;那么可以继续看下去了 目录ln命令语法实操创建软链接&#xff1a;ln -s [源文件或目录][目标文件或目录]创建硬链接&…...

力扣HOT100 (1-5)

目录 1.两数之和 2.两数相加 拓展到牛客的TOP101的BM11( 链表相加&#xff08;二&#xff09;) 3.无重复的最长子串&#xff08;牛客BM92&#xff09; 解法1&#xff1a; 解法2&#xff1a; 4.寻找两个正序数组的中位数 5.最长回文子串 1.两数之和 思路&#xff1a;用Has…...

车载基础软件——AUTOSAR CP典型应用案例SOME/IP和TSN时间同步

我是穿拖鞋的汉子,魔都中坚持长期主义的一个屌丝工程师! 今天是2023年2月7日,上海还在下着雨,估计是到了梅雨时节(提前到来?),真想说句我劝天公重安排,不让梅雨早时来!!! 老规矩分享一段喜欢的文字,避免自己成为高知识低文化的工科男: “ 我们只需做的,是走好…...

【Linux】操作系统与进程的概念

目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备&#xff1f; 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止 bash 通过系统调用创建子进程 fork的辨析 冯诺依曼体系 &#x1f956;冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将…...

(1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法

高斯牛顿法 LM法 DogLeg方法编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;知识点&#xff1a;高斯牛顿是线搜索方法 LM方法是信赖域方法。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;这个就是JTJ是…...

d3.js与echarts对比

D3.js 和 ECharts 是两种常用的数据可视化工具&#xff0c;它们有着不同的优缺点&#xff1a; D3.js&#xff1a; 优点&#xff1a; 功能强大&#xff0c;提供了极高的灵活性和定制性&#xff0c;支持多种图表类型&#xff0c;如柱状图、饼图、散点图、树图、网络图等。 可以…...

机器学习之K-means原理详解、公式推导、简单实例(python实现,sklearn调包)

目录1. 聚类原理1.1. 无监督与聚类1.2. K均值算法2. 公式推导2.1. 距离2.2. 最小平方误差3. 实例3.1. python实现3.2. sklearn实现4. 运行&#xff08;可直接食用&#xff09;1. 聚类原理 1.1. 无监督与聚类 在这部分我今天主要介绍K均值聚类算法&#xff0c;在这之前我想提一…...

OBS 进阶 一个从自定义对话框中 传参到插件的例子

目录 一、自定义对话框,传参综合例子 1、自定义对话框 1)自定义对话框类...

在Linux和Windows上编译datax-web-ui源码

记录&#xff1a;375场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用apache-maven-3.8.7安装编译datax-web-ui源码。在Windows上操作系统上&#xff0c;使用apache-maven-3.8.7编译datax-web-ui源码。版本&#xff1a;JDK 1.8 node-v14.17.3 npm-6.14.13datax-web-ui开…...

React组件生命周期管理

组件生命,就是组件在不同阶段提供对应的钩子函数,来处理逻辑操作。比如初始化阶段,我们需要初始化组件相关的状态和变量。组件销毁阶段时,我们需要把一些数据结构销毁来节约内存。 React组件生命周期 React组件生命周期分为三个阶段:挂载阶段【Mount】、更新阶段【Updat…...

Linux:全志H3图像codec使用笔记

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 图像 codec 概述 图像编解码器(codec) 包含 Encoder 和 Decoder 两部分功能。我们用下列分别说明 Encoder 和 Decoder 的工作方式。 ----------…...

【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)

导语 哈喽&#xff0c;我是你们的木木子&#x1f478;&#xff01; 今天小编要为大家介绍一款小编自己用代码码出来的赛车风格的打字小游戏 取名暂定为《&#x1f697;极限车神&#x1f697;》打字小游戏。 这款Pygame小游戏在玩法上可以说十分创新&#xff0c;不仅能游戏还…...

Springboot扩展点之BeanPostProcessor

前言 Springboot&#xff08;Spring&#xff09;的扩展点其实有很多&#xff0c;但是都有一个共同点&#xff0c;都是围绕着Bean和BeanFactory&#xff08;容器&#xff09;展开的&#xff0c;其实这也很好理解&#xff0c;Spring的核心是控制反转、依赖注入、面向切面编程&…...

Fluent Python 笔记 第 3 章 字典和集合

3.1 泛映射类型 只有可散列 的数据类型才能用作这些映射里的键 字典构造方法&#xff1a; >>> a dict(one1, two2, three3) >>> b {one: 1, two: 2, three: 3} >>> c dict(zip([one, two, three], [1, 2, 3])) >>> d dict([(two, 2…...

大型物流运输管理系统源码 TMS源码

大型物流运输管理系统源码 TMS是一套适用于物流公司的物流运输管理系统&#xff0c;涵盖物流公司内部从订单->提货->运单->配车->点到->预约->签收->回单->代收货款的全链条管理系统。 菜单功能 一、运营管理 1、订单管理&#xff1a;用于客户意向订…...

PCIE总线

PCIE总线记录描述PCI分类与速度PCIE连接拓扑与角色PCIE接口定义PCIE数据传输方式与中断在PCIE中有两种数据传输方式&#xff1a;PCIE中断&#xff1a;PCIE协议栈与工作流程PCIE地址空间分类实例分析PCIE两种访问方式描述 PCI-Express(peripheral component interconnect expre…...

Android IO 框架 Okio 的实现原理,如何检测超时?

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 提问。 前言 大家好&#xff0c;我是小彭。 在上一篇文章里&#xff0c;我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势&#xff1a;精简且全面的 API、基于共享的缓冲区设计以…...

简单介绍反射

1.定义Java的反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能调用它的任意方法和属性&#xff0c;既然能拿到&#xff0c;我们就可以修改部分类型信息&#xff1b;这种动态获取信息的…...

PyTorch学习笔记:nn.MSELoss——MSE损失

PyTorch学习笔记&#xff1a;nn.MSELoss——MSE损失 torch.nn.MSELoss(size_average None&#xff0c;reduce None&#xff0c;reduction mean)功能&#xff1a;创建一个平方误差(MSE)损失函数&#xff0c;又称为L2损失&#xff1a; l(x,y)L{l1,…,lN}T,ln(xn−yn)2l(x,y)L…...

apache和nginx的TLS1.0和TLS1.1禁用处理方案

1、TLS1.0和TLS1.1是什么&#xff1f; TLS协议其实就是网络安全传输层协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性&#xff0c;TLS 1. 0 和TLS 1. 1 是分别是96 年和 06 年发布的老版协议。 2、为什么要禁用TLS1.0和TLS1.1传输协议 TLS1.0和TLS1.1协…...