LeetCode-1155. 掷骰子的N种方法 ——动态规划
这里有 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种方法 ——动态规划相关推荐
- LeetCode 1155. 掷骰子的N种方法--动态规划
掷骰子的N种方法 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target ...
- LeetCode 1155. 掷骰子的N种方法(DP)
1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...
- leetcode - 1155. 掷骰子的N种方法
这里有 ddd 个一样的骰子,每个骰子上都有 fff 个面,分别标号为 1,2,...,f1, 2, ..., f1,2,...,f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需 ...
- LeetCode 1155. 掷骰子的N种方法 每日一题
问题描述 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k . 给定三个整数 n , k 和 target ,返回可能的方式(从总共 kn 种方式中)滚动骰子的数量,使正面 ...
- leetcode_1155 掷骰子的N种方法 动态规划
LeetCode 1155 LeetCode Contest 149 No.2 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各 ...
- Leetcode1155:掷骰子的N种方法
Leetcode1155:掷骰子的N种方法 题目: 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k . 给定三个整数 n , k 和 target ,返回可能的方式(从总共 ...
- leetcode算法题--掷骰子的N种方法
原题链接:https://leetcode-cn.com/problems/number-of-dice-rolls-with-target-sum/ 动态规划 dp[i][k]表示前i个骰子,k表示 ...
- [Swift]LeetCode1155. 掷骰子的N种方法 | Number of Dice Rolls With Target Sum
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:为敢(WeiGanTechnologies) ➤博客园地址:山青咏芝(https://www.cnblo ...
- 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 = ...
最新文章
- select chosen-jquery.js下拉列表的层被覆盖
- 架构师速成7.2-为什么要学习协议、规范
- ES6入门概览二--数组
- NYOJ 975 关于521
- “Error launching Console Application PDFLaTeX ... “的解决方法
- HTB_Dancing 靶机之 smb 协议简介
- VMware-Esxi6.7各个版本镜像文件iso下载链接
- 唱响艾泽拉斯_情感篇
- 老徐自述:《软件自动化测试实战解析_基于Python3编程语言》
- 直到输到-1停止 c语言,python新人求助raw_input()问题,不断提示输入字元或数字直到输入空值停止提示。...
- Win2016 安装及配置 + 存储卷管理
- 基于AHK的键盘映射——高效利用CapsLock键
- C语言打印多颜色字体,多功能打印,协助开发调试
- CC2530基础实验:(2)外部中断控制LED亮灭
- linux命令--dmesg
- 刚刚,华为决定起诉美国政府
- python写音乐播放器_AJ Kipper:用Python写一个简易的MP3播放器
- Facebook商务管理插件怎么使用
- freemaker生成doc文档(特殊字符导致异常)
- 开发者 发展 8 效率 web服务 如何学习
热门文章
- 我的Android成长之路(1)----TextView设置不同大小字体
- sqlloader的使用------windows版
- Mac 动态壁纸软件
- ios和android王者cp,王者荣耀苹果和安卓可以建立亲密关系吗
- [入门篇]用史上最生动的方式让你一篇博客搞懂Linux进程地址空间,包看包懂!
- VR虚拟地产解决方案
- 【三维重建】【深度学习】windows10下NeRF代码Pytorch实现
- 和平精英android怎么写符号,和平精英特殊符号怎么打 和平精英名字特殊符号怎么弄的...
- 我的世界java版游戏角色名_我的世界:默认游戏角色中谁最帅?jeb成为了万众瞩目的那一个...
- Linux中如何让vi里代码运行,Vim - 文本代码编辑器