【题解 | 分组背包】掷骰子等于目标和的方法数

掷骰子等于目标和的方法数

力扣:1155. 掷骰子等于目标和的方法数

这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1k

给定三个整数 nktarget,请返回投掷骰子的所有可能得到的结果(共有 kn 种方式),使得骰子面朝上的数字总和等于 target

由于答案可能很大,你需要对 109 + 7 取模

示例 1:

输入:n = 1, k = 6, target = 3
输出:1
解释:你掷了一个有 6 个面的骰子。
得到总和为 3 的结果的方式只有一种。

示例 2:

输入:n = 2, k = 6, target = 7
输出:6
解释:你掷了两个骰子,每个骰子有 6 个面。
有 6 种方式得到总和为 7 的结果: 1+6, 2+5, 3+4, 4+3, 5+2, 6+1。

示例 3:

输入:n = 30, k = 30, target = 500
输出:222616187
解释:返回的结果必须对 109 + 7 取模。

提示:

  • 1 <= n, k <= 30
  • 1 <= target <= 1000

解题思路

我们将每个骰子看作一个组,每个组有k个物品(骰子的面数),每个物品的价值(面数)都不同。我们的目标是从这些组中选择一些物品,使得它们的总价值等于目标值target

也就是说,"背包"是目标总和target,"物品"是骰子的面数1~k,"组"是这n个骰子。我们需要从每个组(骰子)中选择一些物品(面数),使得它们的总价值(总和)等于背包的容量(目标总和)。

我们定义状态 f[i][j] 表示使用前 i 个骰子得到总和为 j 的方式数量。

状态转移方程为 f[i][j] = (f[i][j] + f[i - 1][j - x]) % mod ,也就是说,对于每个组(骰子)i,我们可以选择或不选择这个组的物品(面数)x,如果我们选择了这个物品,那么我们需要从 f[i - 1][j - x] 转移到 f[i][j](使用一个骰子,总和增加了x)。

参考代码如下:

class Solution {public int numRollsToTarget(int n, int k, int target) {final int mod = (int) 1e9 + 7;int[][] f = new int[n + 1][target + 1];f[0][0] = 1;for (int i = 1; i <= n; ++i) {for (int j = 1; j <= Math.min(target, i * k); ++j) {for (int x = 1; x <= Math.min(j, k); ++x) {f[i][j] = (f[i][j] + f[i - 1][j - x]) % mod;}}}return f[n][target];}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10倍提效!用ChatGPT编写系统功能文档。。。

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT&#xff0c;我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…

纳米体育数据足球数据接口:高阶数据包接口文档API示例②

纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口&#xff0c;无请求次数限制&#xff0c;可按需购买&#xff0c;接口稳定高效&#xff1b;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。 纳米数据API2.0版本…

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示&#xff1a; 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态&#xff0c;而是进入TIME_WAIT状态&#xff0c;一般等2MLS后进入关闭状态。 原因&#xff1a; 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

长文本大模型火爆国内AI市场,算力需求激增引领行业变革

近期&#xff0c;一款名为Kimi的大模型火爆国内AI市场&#xff0c;以其出色的长文本处理能力和广泛的应用前景吸引了众多关注。随着Kimi等长文本大模型的流行&#xff0c;算力需求持续增长&#xff0c;为AI行业带来了新的变革和机遇。 Kimi突破长文本处理极限&#xff0c;为复杂…

Leetcode-Hot 100题目分类

哈希 &#xff08;以空间换时间&#xff09; 1 两数之和 原始的暴力破解的方法&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {/** 暴力破解的方法 */int[] result new int[2];int length nums.length;for(int i 0;i<length;i){for(int j…

win10鼠标无限转圈圈是什么原因,win10系统鼠标无限转圈圈

win10鼠标无限转圈圈是什么原因?一般后台有程序在运行,鼠标出现圆圈转动则代表正在加载中,等待一会就好了。若如果转了好久的圈圈,程序没有响应,点击桌面也没有反应,则尝试打开任务管理器,将未响应或异常的程序强制结束掉。其实,出现这种情况,有可能是win10系统中的一…

【氮化镓】GaN SP-HEMT的栅极可靠性

概括总结&#xff1a; 本文研究了氮化镓&#xff08;GaN&#xff09;肖特基型p-栅高电子迁移率晶体管&#xff08;GaN SP-HEMT&#xff09;的栅极鲁棒性和可靠性&#xff0c;通过一种新的电路方法评估了在实际转换器中栅极电压&#xff08;VGS&#xff09;过冲波形的栅极电压应…

第四百四十二回 再谈flutter_launcher_icons包

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容&#xff0c;本章回中将 再谈flutter_launcher_icons包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 …

dockerhub右键快速搜索脚本

Chrome 浏览器扩展的后台脚本&#xff0c;用于创建右键菜单项&#xff0c;并根据用户的操作在新的标签页中打开 Docker Hub 网站或者进行搜索。 // 创建右键菜单项&#xff0c;用于打开 Docker Hub 网站 chrome.contextMenus.create({id: search-home, // 菜单项的唯一标识符t…

吴恩达2022机器学习专项课程(一) 4.6 运行梯度下降第一周课程实验:线性回归的梯度下降算法

问题预览/关键词 更新梯度下降对模型拟合&#xff0c;等高线图&#xff0c;3d空间图的变化。什么是批量梯度下降。实验目标计算梯度运行梯度下降梯度下降迭代次数和成本函数的关系可视化模型预测在等高线图上的梯度下降学习率过大报错问题 笔记 1.模型拟合&#xff0c;等高线…

刷题之Leetcode283题(超级详细)

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nu…

C语言拾遗

1、 char *itoa(int value, char *string, int radix) 整形转换成字符串&#xff0c;但该函数实际上不属于c标准库&#xff0c;只是windows和gcc中提供了该接口。 如果无法使用该接口&#xff0c;一般可以使用sprintf进行替代。在leecode中&#xff0c;就不会提供itoa接口。 at…

Qt环形颜色选择控件, 圆环颜色选择器

参考文章Qt编写自定义控件&#xff1a;环形颜色选择控件_qconicalgradient圆环渐变-CSDN博客 感谢作责提供的方法&#xff0c;下面程序的基础思路同参考文章。 为了更方便使用&#xff0c;这个选择器是基于64色表的&#xff0c;会显示选中的索引和色值。颜色选择时计算方式也…

腾讯云优惠券介绍、领券入口及使用教程分享

腾讯云作为国内领先的云服务提供商&#xff0c;为广大用户提供了稳定、高效、安全的云计算服务。为了吸引用户上云&#xff0c;腾讯云推出了优惠券活动。本文将对腾讯云优惠券进行详细介绍&#xff0c;包括优惠券的种类、领券入口以及使用教程&#xff0c;助力大家轻松上云&…

Web APIs简介 Dom

JS的组成 API API 是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 简单理解&#xff1a;API是给程序员提供的一种工具&#xff0c;以便能更轻松的实现…

旋转验证码v2的加密算法

某网站最近更新了旋转验证码v2的加密算法&#xff0c;给爬虫程序带来了新的挑战。本文将通过网络抓包和逆向分析&#xff0c;深入探讨验证码请求和响应的加密机制&#xff0c;并提供详细的代码实现&#xff0c;帮助读者了解并应对新版验证码的加密算法。 网络抓包分析&#xf…

数据计算_先分组平均再加总平均与直接整体平均的差异

数据计算_先分组平均再加总平均与直接整体平均的差异 例如: 现有 A, B, C, D, E, F, G, H 共 8 组数据。 A: 16619 B: 12922 C: 15946 D: 13096 E: 13647 F: 13700 G: 13703 H: 12430其整体平均的值为: Average of ABCDEFGH: (16619 12922 15946 13096 13647 13700 1…

RecyclerView实现View复用的原理

RecyclerView是Android框架类&#xff0c;用于显示一个持续更新的项列表。它是一个容器&#xff0c;可以利用回收和重用的视图元素来展示数据。 RecyclerView的工作原理&#xff1a; 当RecyclerView需要展示一个新的项时&#xff0c;它会调用Adapter的onCreateViewHolder()方…

Linux--文件、分区与挂载

概述1 **Linux系统中的文件系统是用于管理文件的系统**&#xff0c;它负责数据的存储和管理。在Linux中&#xff0c;一切皆文件&#xff0c;包括普通的文件、目录以及块设备、管道等都通过文件系统来管理。文件系统不仅包含文件中的数据&#xff0c;还包括文件系统的结构&…

授人以渔 选购EX篇:推荐杂记索引

文章目录 系列文章生活好物饮食好物其他好物系统软件篇软件推荐杂记娱乐推荐杂记 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选购篇三&#xff1a;洗衣机&#xff08;烘干机&#xff09;选购要点 授人以渔 选…