这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, …, f。

我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。

如果需要掷出的总点数为 target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模 10^9 + 7 后返回。

示例 1:

输入:d = 1, f = 6, target = 3
输出:1
示例 2:

输入:d = 2, f = 6, target = 7
输出:6
示例 3:

输入:d = 2, f = 5, target = 10
输出:1
示例 4:

输入:d = 1, f = 2, target = 3
输出:0
示例 5:

输入:d = 30, f = 30, target = 500
输出:222616187

提示:

1 <= d, f <= 30
1 <= target <= 1000

思路:

状态转移方程:F(d,target) = F(d-1,target-1) + F(d-1,target-2)+ … + F(d-1,target-f)

class Solution {private int mod = 1000000000+7;private int[][] cache;public int numRollsToTarget(int d, int f, int target) {if (target < d | target > d * f) return 0;cache = new int[d+1][target+1];for (int[] cc:cache){Arrays.fill(cc,-1);}return dfs(d,f,target);}private int dfs(int d, int f,int target) {if (target==0&&d==0){//需要的组合数只要0个并且此时骰子数为0,此时只有一种方案return 1;}if (target<=0||d<=0){//只要两者中有一个条件不满足则没有方案return 0;}if (cache[d][target]!=-1){//该情况已经处理过了直接从数组中获取return cache[d][target];}//只有一个骰子if (d==1){if (target<=f&&target>0){//需要的点数大于零并且存在标号等于该点数的return cache[d][target]=1;}else {return cache[d][target]=0;}}int ans = 0;//对当前骰子投掷出的每个面数都进行处理for (int i=1;i<=f;i++){ans = (ans+dfs(d-1,f,target-i))%mod;}//对数据进行记录return cache[d][target]=ans;}
}

LeetCode-1155. 掷骰子的N种方法 ——动态规划相关推荐

  1. LeetCode 1155. 掷骰子的N种方法--动态规划

    掷骰子的N种方法 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target ...

  2. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  3. leetcode - 1155. 掷骰子的N种方法

    这里有 ddd 个一样的骰子,每个骰子上都有 fff 个面,分别标号为 1,2,...,f1, 2, ..., f1,2,...,f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需 ...

  4. LeetCode 1155. 掷骰子的N种方法 每日一题

    问题描述 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k . 给定三个整数 n ,  k 和 target ,返回可能的方式(从总共 kn 种方式中)滚动骰子的数量,使正面 ...

  5. leetcode_1155 掷骰子的N种方法 动态规划

    LeetCode 1155 LeetCode Contest 149 No.2 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各 ...

  6. Leetcode1155:掷骰子的N种方法

    Leetcode1155:掷骰子的N种方法 题目: 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k . 给定三个整数 n , k 和 target ,返回可能的方式(从总共 ...

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

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

  8. [Swift]LeetCode1155. 掷骰子的N种方法 | Number of Dice Rolls With Target Sum

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:为敢(WeiGanTechnologies) ➤博客园地址:山青咏芝(https://www.cnblo ...

  9. Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)

    dp[i][j]表示前i个骰子到达数字总和j的方案数 dp[i][j] = Σdp[i-1][j-k],其中k是一个骰子能掷出的范围 1 #define _for(i,a,b) for(int i = ...

最新文章

  1. select chosen-jquery.js下拉列表的层被覆盖
  2. 架构师速成7.2-为什么要学习协议、规范
  3. ES6入门概览二--数组
  4. NYOJ 975 关于521
  5. “Error launching Console Application PDFLaTeX ... “的解决方法
  6. HTB_Dancing 靶机之 smb 协议简介
  7. VMware-Esxi6.7各个版本镜像文件iso下载链接
  8. 唱响艾泽拉斯_情感篇
  9. 老徐自述:《软件自动化测试实战解析_基于Python3编程语言》
  10. 直到输到-1停止 c语言,python新人求助raw_input()问题,不断提示输入字元或数字直到输入空值停止提示。...
  11. Win2016 安装及配置 + 存储卷管理
  12. 基于AHK的键盘映射——高效利用CapsLock键
  13. C语言打印多颜色字体,多功能打印,协助开发调试
  14. CC2530基础实验:(2)外部中断控制LED亮灭
  15. linux命令--dmesg
  16. 刚刚,华为决定起诉美国政府
  17. python写音乐播放器_AJ Kipper:用Python写一个简易的MP3播放器
  18. Facebook商务管理插件怎么使用
  19. freemaker生成doc文档(特殊字符导致异常)
  20. 开发者 发展 8 效率 web服务 如何学习

热门文章

  1. 我的Android成长之路(1)----TextView设置不同大小字体
  2. sqlloader的使用------windows版
  3. Mac 动态壁纸软件
  4. ios和android王者cp,王者荣耀苹果和安卓可以建立亲密关系吗
  5. [入门篇]用史上最生动的方式让你一篇博客搞懂Linux进程地址空间,包看包懂!
  6. VR虚拟地产解决方案
  7. 【三维重建】【深度学习】windows10下NeRF代码Pytorch实现
  8. 和平精英android怎么写符号,和平精英特殊符号怎么打 和平精英名字特殊符号怎么弄的...
  9. 我的世界java版游戏角色名_我的世界:默认游戏角色中谁最帅?jeb成为了万众瞩目的那一个...
  10. Linux中如何让vi里代码运行,Vim - 文本代码编辑器