【动态规划-多重背包】【hard】力扣2585. 获得分数的方法数

news2024/11/16 12:25:13

考试中有 n 种类型的题目。给你一个整数 target 和一个下标从 0 开始的二维整数数组 types ,其中 types[i] = [counti, marksi] 表示第 i 种类型的题目有 counti 道,每道题目对应 marksi 分。

返回你在考试中恰好得到 target 分的方法数。由于答案可能很大,结果需要对 109 +7 取余。

注意,同类型题目无法区分。

比如说,如果有 3 道同类型题目,那么解答第 1 和第 2 道题目与解答第 1 和第 3 道题目或者第 2 和第 3 道题目是相同的。

示例 1:
输入:target = 6, types = [[6,1],[3,2],[2,3]]
输出:7
解释:要获得 6 分,你可以选择以下七种方法之一:

  • 解决 6 道第 0 种类型的题目:1 + 1 + 1 + 1 + 1 + 1 = 6
  • 解决 4 道第 0 种类型的题目和 1 道第 1 种类型的题目:1 + 1 + 1 + 1 + 2 = 6
  • 解决 2 道第 0 种类型的题目和 2 道第 1 种类型的题目:1 + 1 + 2 + 2 = 6
  • 解决 3 道第 0 种类型的题目和 1 道第 2 种类型的题目:1 + 1 + 1 + 3 = 6
  • 解决 1 道第 0 种类型的题目、1 道第 1 种类型的题目和 1 道第 2 种类型的题目:1 + 2 + 3 = 6
  • 解决 3 道第 1 种类型的题目:2 + 2 + 2 = 6
  • 解决 2 道第 2 种类型的题目:3 + 3 = 6

示例 2:
输入:target = 5, types = [[50,1],[50,2],[50,5]]
输出:4
解释:要获得 5 分,你可以选择以下四种方法之一:

  • 解决 5 道第 0 种类型的题目:1 + 1 + 1 + 1 + 1 = 5
  • 解决 3 道第 0 种类型的题目和 1 道第 1 种类型的题目:1 + 1 + 1 + 2 = 5
  • 解决 1 道第 0 种类型的题目和 2 道第 1 种类型的题目:1 + 2 + 2 = 5
  • 解决 1 道第 2 种类型的题目:5

示例 3:
输入:target = 18, types = [[6,1],[3,2],[2,3]]
输出:1
解释:只有回答所有题目才能获得 18 分。
在这里插入图片描述

多重背包

class Solution {
public:
    int waysToReachTarget(int target, vector<vector<int>>& types) {
        int MOD = 1e9 + 7, n = types.size();
        vector<int> dp(target+1);
        dp[0] = 1;
        for(int i = 0; i < n; i++){
            for(int j = target; j >= 0; j--){
                for(int k = 1; k <= types[i][0]; k++){       //答对这种题的数目
                    int t = k * types[i][1];
                    if(t > j) break;
                    dp[j] = (dp[j] + dp[j-t]) % MOD;
                }
            }
        }
        return dp[target];
    }
};

多重背包:物品可以重复选,有个数限制。

首先定义一个dp[j]向量,含义是得分为j的时候的方法数。
首先我们定义dp[0]为1。
然后进行三个嵌套for循环,第一层循环的目的是遍历每一种题目类型。
第二层倒序从target向下循环,目的是利用动态规划的方法记录当得分为j的方法数有多少。
第三次是由于题目类型i已经确定,我们定义k为答对这类题目的数量,所以t为这类题目的总得分。
当t如果大于我们的目标分数j的时候,就break,因为这时候dp[j-t]没有意义。

当我们确定某一类题目总得分t的时候,这时候方法数就是dp[j-t],我们就将之前计算的方法数dp[j]加上dp[j-t]来确定一个新的dp[j],这新的dp[j]会覆盖旧的dp[j]。

最后我们要求的就是dp[target]当目标分数为target时候的方案数。

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

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

相关文章

mac 上配置Jmeter代理进行web脚本录制过程容易踩坑的点

macOS 配置 Jmeter代理录制web脚本&容易踩坑的点 mac配置下载&#xff1a;前景提要&#xff1a;Jmeter中具体操作容易踩坑的点1、进入浏览器后&#xff0c;显示访问连接不安全。2、证书失效需要重新生成3、重新生成证书的方式4、没有生成新的证书5、jmeter安装路径找不到 m…

数据库实验2—1

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…

因为穷,研究了一些备考软考高级「系分」的省钱方法!

有大学生留言&#xff1a;老师推荐我们考软考高级-系统分析师&#xff08;简称“系分”&#xff09;&#xff0c;但是对于大学生来说每次考证都好贵啊&#xff01;报名费、各种备考资料、视频课程、官方教程......七七八八加起来不少钱了。有没有钱包不痛备考软考高级的方法&am…

springboot集成nacos+gateway+feign

一、创建项目 1.创建一个maven项目 2.添加对应的pom参数 2.1添加工程对应的jar包 <!-- 父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.7</…

如何有效评估与最大化利用专利价值?

专利价值评估是确定专利经济价值的关键环节。对于企业而言&#xff0c;准确评估专利价值可以帮助其做出明智的决策&#xff0c;如是否进行专利的投资、许可、转让等。同时&#xff0c;专利价值评估也为金融机构提供了重要的参考依据&#xff0c;有助于推动专利质押融资、证券化…

GetThreadSelectorEntry teb peb 段选择子 LDT_ENTRY _LDT_ENTRY

GetThreadSelectorEntry 函数原型 BOOL GetThreadSelectorEntry([in] HANDLE hThread,[in] DWORD dwSelector,[out] LPLDT_ENTRY lpSelectorEntry ); typedef struct _LDT_ENTRY {WORD LimitLow;WORD BaseLow;union {struct {BYTE BaseMid;BYTE Flags1;BYTE Fla…

Chroma 向量数据入门

Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM&#xff0c;从而可以轻松构建 LLM 应用程序。Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM&#xff0c;从而可以轻松构建 LLM 应用程序。 &#x1f31f;Chroma是一个文档…

WIN2008 iis安装与ASP设置

win2008 IIS安装在 Windows Server 2008 系统中安装IIS - morgan363 - 博客园 如何在 Windows Server 2008 系统中安装 IIS 呢&#xff1f;且看如下分解&#xff1a; 1、鼠标右键 “计算机”&#xff0c;选择“管理”&#xff0c;打开“服务器管理器”。 2、在“服务器管理器”…

【永磁同步电机(PMSM)】 3. 基于Matlab 的仿真与控制

【永磁同步电机&#xff08;PMSM&#xff09;】 3. 基于Matlab 的仿真与控制 1. 电机的仿真与控制2. BLDC 电机与 PMSM 电机3. BLDC 的方波控制4. 磁场定向控制&#xff08;FOC&#xff09;5. 空间矢量调制 (SVM)6. PMSM 模型的频率响应估计 电机仿真和控制是能源生产、汽车、航…

C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的贪吃蛇&#xff0c;并随机出现一个食物&am…

cpu路、核、线程、主频、缓存

路&#xff1a;主板插口实际插入的 CPU 个数&#xff0c;也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如&#xff0c;一台服务器可能有2路或4路插槽&#xff0c;这意味着它最多可以安装2个或4个物理处理器。 核&#xff1a;单块 CPU 上面能…

代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

226.翻转二叉树 翻转一棵二叉树。 思路&#xff1a; 在这里需要注意的是&#xff0c;在递归的时候唯独中序遍历是不可用的&#xff0c;这是因为先对左子树进行了反转&#xff0c;又对自身进行了反转&#xff0c;对自身反转后原本的左子树变成了右子树&#xff0c;如果此时又轮…

npm依赖安装的时候vue版本号报错处理

以下报错显示vue版本不对&#xff0c;需要改成这个版本"vue": "2.6.14"对应的版本 先看一下package.json中vue版本是多少 解决&#xff1a; npm install vue2.6.14

【重要提示】由于找不到msvcr110.dll 无法继续执行的解决途径全面解析

在使用Windows操作系统时&#xff0c;您可能会遇到这样的问题&#xff1a;某些应用程序在启动时提示“由于找不到 msvcr110.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。” 这种错误通常会导致应用程序无法正常运行&#xff0c;影响用户体验。本文将全面介…

django开发流程1

一、官方网站&#xff1a; Django documentation | Django documentation | Djangohttps://docs.djangoproject.com/en/5.1/ 1.安装 django : pip install django 2. django项目的配置文件 (settings.py) BASE_DIR 项目根路径 DEBUG 调试模式 INSTALLE…

如何在算家云搭建CodeFormer(照片修复)

一、CodeFormer简介 CodeFormer 是一款强大的人工智能工具&#xff0c;专为处理低质量、损坏或模糊的面部图像而设计&#xff0c;主要用于图像和视频的修复和增强。它基于深度学习技术&#xff0c;通过先进的生成对抗网络&#xff08;GAN&#xff09;和自监督学习技术&#xf…

【LeetCode热题100】模拟

这篇博客记录了模拟相关的题目&#xff0c;也就是按照题目的描述写代码&#xff0c;很锻炼代码实现能力&#xff0c;包括了替换所有的问号、Z字形变换、外观数列、数青蛙4道题。 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0 ; i <…

《数据结构与算法之美》学习笔记五之队列

前情提要&#xff1a;上一章学习了栈相关的知识&#xff0c;主要有下面的内容&#xff1a; 栈操作的时间复杂度&#xff0c;对于顺序栈&#xff0c;入栈时如果栈的空间不够涉及到数据搬移&#xff0c;此时使用摊还分析法&#xff0c;将数据搬移的耗时均摊到不需要搬移数据的入…

DeFi强势回归:新一轮DeFi牛市即将到来?

自2020年夏天的“DeFi之夏”以来&#xff0c;去中心化金融&#xff08;DeFi&#xff09;一直是加密行业的关键组成部分。“DeFi之夏”不仅将去中心化金融概念带入了实践&#xff0c;而且极大地推动了DeFi协议和应用的爆发式增长。尽管之后的市场经历了周期性的调整&#xff0c;…

【C++类的设计】题目(二):设计圆柱Column类

题目&#xff1a;设一个用于处理圆柱体的类Column&#xff0c;要求如下 (1)类中包含成员有&#xff1a;表示圆柱体底面半径的私有数据成员r&#xff0c;表示圆柱体高的私有数据成员h&#xff1b;构造对象时为私有数据成员赋值的构造函数&#xff0c;用于计算圆柱体表面积的函数…