原题链接:https://leetcode-cn.com/problems/dice-roll-simulation/

动态规划:

dp[i][j][k]表示投掷第i次,点数为j,k表示连续次数

状态转移:

  • 当j非连续出现时(即k==1时):
//j出现一次的组合数等于上一轮投出非点数j的所有情况和
dp[i][j][1]=sum(dp[i-1][!j][:])
  • 当j连续出现时(即k>1时):
//本轮投出连续k次的点数j的数量情况等于上一轮连续投出k-1次的点数j的数量情况
dp[i][j][k]=dp[i-1][j][k-1]        if k<=rolMax[j]

代码:

int dieSimulator(int n, vector<int>& rollMax) {int mod = 1000000007;vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(7, vector<int>(16, 0)));for (int i = 1; i <= n; i++){//投掷次数for (int j = 1; j <= 6; j++){if (i == 1){//第一次投掷dp[i][j][1] = 1;continue;}for (int k = 2; k <= rollMax[j - 1]; k++){//数字j连续出现k次dp[i][j][k] = dp[i - 1][j][k - 1];//本轮投出连续k次数字j的情况数量等于:上一轮连续投出k-1次j的情况数量}int s = 0;for (int t = 1; t <= 6; t++){//前一次投出的数不是jif (t == j) continue;for (int k = 1; k <= 15; k++){s += dp[i - 1][t][k];//j出现一次的组合数等于上一轮所有投出非数字j的所有情况和s %= mod;}}dp[i][j][1] = s;}}int ans = 0;for (int j = 1; j <= 6; j++){//投掷n次时所有组合总和for (int k = 1; k <= 15; k++){ans += dp[n][j][k];ans %= mod;}}return ans;
}

leetcode算法题--掷骰子模拟★★相关推荐

  1. leetcode算法题--掷骰子的N种方法

    原题链接:https://leetcode-cn.com/problems/number-of-dice-rolls-with-target-sum/ 动态规划 dp[i][k]表示前i个骰子,k表示 ...

  2. leetcode - 1223. 掷骰子模拟

    1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 111 到 666 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 iii 的次数不能超过 rollMax ...

  3. Leetcode.1223 掷骰子模拟

    题目链接 Leetcode.1223 掷骰子模拟 Rating : 2008 题目描述 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时 ...

  4. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  5. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  6. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  7. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  8. leetcode算法题--零钱兑换

    原题链接:https://leetcode-cn.com/problems/coin-change/ 相关题目:leetcode算法题–完全平方数★ 动态规划 dp[i] i从0到amount,dp[ ...

  9. leetcode算法题-- 买卖股票的最佳时机

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 这类股票题目请见leetcode算法题–最佳买卖股票时机含 ...

最新文章

  1. CF570D Tree Requests
  2. 教你如何保养iphone电池
  3. python 多维数组(array)排序
  4. 【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践
  5. UDP(socket)接和数据案例封装成C++代码
  6. android apk 反编译工具,安卓apk反编译神器
  7. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
  8. android系统功耗优化(2)---Android最佳实践之性能 - 电池续航时间优化
  9. 机器学习篇01:在线学习的支持向量机算法学习笔记
  10. 【SSH网上商城项目实战08】查询和删除商品类别功能的实现
  11. MySQL-第十篇多表连接查询
  12. beini安装破*WIFI
  13. 基于OpenCV 人工神经网络的喷码字符识别(C++)
  14. VB中常用的的ASCII码chr()对应表
  15. 计算机组成基础(2)-- 微体系结构层
  16. 聊聊技术人的“绩效考核”
  17. Windows Server 2016 IPAM 服务管理-李海园-专题视频课程
  18. opencv2.0 DataType 实现
  19. 如何使用idea生成Doc文档
  20. 嵌入式linux并行通信,嵌入式Linux

热门文章

  1. python搞笑代码-为PYTHON添加define功能【搞笑代码】
  2. python整数类型-Python整数类型及其运算
  3. python 书 推荐-推荐几本Python书
  4. python好找工作么-python和django掌握到什么水平才好找工作?
  5. 初学者学python好还是c-学Python还是学C?
  6. 有道精品课python-有道精品课-Python小咖养成计划
  7. python在财务领域的应用-浅谈财务智能化在实际工作中的运用
  8. python 命令行参数-python实现读取命令行参数的方法
  9. 免费学python的软件-初学python编程,有哪些不错的软件值得一用?
  10. python split(), os.path.split()和os.path.splitext()函数的区别