LeetCode·每日一题·1335. 工作计划的最低难度·动态规划

news2025/1/20 10:54:24

作者:小迅
链接:https://leetcode.cn/problems/minimum-difficulty-of-a-job-schedule/solutions/2271898/dong-tai-gui-hua-zhu-shi-chao-ji-xiang-x-4elt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

 

示例

 

思路

题意 -> 将数组分为d段,求每段最大值之和的最小值

将数据分成 d 段,每一段的最小长度为 1 ,最大长度为 size - d + 当前第几段。

最简单直接的方法是,递归枚举每一段的有效数据,然后将所有段的有效数据进行组合,得出最小的和值。比如先枚举第一段可以选择的每一个数据长度,然后取当前数据长度的最大值,将剩余值给第二段,第二段进行第一段的方法,以此类推,得到所有组合,然后取最小值。

上述方法虽然可行,但是会包含大量的重复计算,比如总长度5,第一段选择了数据长度 1 、第二段选择数据长度 2 和 第一段选择了数据长度 2 、第二段选择数据长度 1,最后第三段都剩余 3,那么肯定可以记录选择过程,当遇见相同情况时直接返回。

整个递归中有大量重复递归调用(递归入参相同)。由于递归函数没有副作用,同样的入参无论计算多少次,算出来的结果都是一样的,因此可以用记忆化搜索来优化

每一个的递归其实都是一个将大问题转换为多个小问题的过程,再在每一个小问题中取最优解,再将每一个小问题的最优解进行对比、合并,从而得到大问题的最优解。

本题中,使用dp数组记录每一个小问题的最优解。

  • 其中dp[i][j]表示 第i+1个段选择的数据长度为 j+1 (i <= j <= jobDifficultySize-1 - (d-i-1)),保证最少在i之前和之后每一个段有一个数据。
  • 转移方程:dp[i][j] = MIN(dp[i][j], dp[i-1][k-1] + max);即当前区间的最大值 + 上一个区间的最优解 与 当前区间的当前最优解对比
  • dp[0][j]为第一个段的长度为 j,则肯定只能为 jobDifficulty[0] - jobDifficulty[j] 区间的最大值

代码注释超级详细

代码


#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
int minDifficulty(int* jobDifficulty, int jobDifficultySize, int d){
    if (jobDifficultySize < d) return -1;
    int dp[d][jobDifficultySize];//定义dp数组

    dp[0][0] = jobDifficulty[0];
    for (int i = 1; i < jobDifficultySize-d+1; ++i) {
        dp[0][i] = MAX(dp[0][i-1], jobDifficulty[i]);//初始化
    }

    for (int i = 1; i < d; ++i) {//枚举第一个段
        for (int j = jobDifficultySize-1 - (d-i-1); j >= i; --j) {//枚举每一个有效长度
            int max = INT_MIN;
            dp[i][j] = INT_MAX;
            for (int k = j; k >= i; --k) {//枚举有效长度的每一个位置
                max = MAX(max, jobDifficulty[k]);//保存每一个位置的最小值
                dp[i][j] = MIN(dp[i][j], dp[i-1][k-1] + max);//保存最优解
            }
        }
    }
    return dp[d-1][jobDifficultySize-1];
}

作者:小迅
链接:https://leetcode.cn/problems/minimum-difficulty-of-a-job-schedule/solutions/2271898/dong-tai-gui-hua-zhu-shi-chao-ji-xiang-x-4elt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

出学校干了 3 年外包,人废了···

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟。 大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试。今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经…

Python—练习题

文档结构 练习题 练习题 1、使用一行代码实现给定列表的奇偶数分离&#xff1b;list_a [11, 22, 45,17,19,21,76,34,28,59] 答案&#xff1a;此处使用 列表推导式实现&#xff1b; >>> >>> list_a [11, 22, 45,17,19,21,76,34,28,59] >>> part…

JWT(Json Web Token)的原理、渗透与防御

&#xff08;关于JWT kid安全部分后期整理完毕再进行更新~2023.05.16&#xff09; JWT的原理、渗透与防御 目录 JWT的原理、渗透与防御含义原理JWT的起源传统session认证问题token与session区别JWT的结构与内容 JWT的攻击和渗透敏感信息泄露空密钥破解密钥爆破CVE-2019-7644 J…

BFT 最前线 |文心一言推出内测专用独立App,谷歌发布 AI 网络安全套件,腾讯机器人业务新突破:自研灵巧手与机械臂首次亮相

文 | BFT机器人 01 科大讯飞将发布星火认知大模型 百度聊天机器人文心一言已经启动邀测一个多月。现在网友发现&#xff0c;文心一言已经推出了内测专用独立App&#xff0c;目前仅提供安卓版。用户可以通过键盘打字输入问题&#xff0c;也可以通过语音方式输入问题&#xff0c…

JavaScript简介及常用语法

简介 JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web &#xff0c;更可广泛用于服务器、 PC 、 笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScrip…

基于 KONOS 编写一个部门级的前端框架

01 什么是 konos 现在对于前端框架的定义越来越广泛了&#xff0c;在前端工程化中的某一个环节的特定方案&#xff0c;都可泛称为一个前端框架。 konos 是一个插件化的前端框架基座&#xff0c;如果你对 umi 有所了解的话&#xff0c;可以把它当作一个没有任何功能的 umi core …

RocketMQ单机环境部署

文章目录 1. 前置条件2. 下载源码3. 编译源码4. Rocket MQ启动JVM参数配置5. 启动RocketMQ6. 安装DashBoard7. 测试RocketMQ9. 查看dashboard情况 不太懂RocketMQ基本概念的看我 这篇博客 1. 前置条件 &#xff08;看我这篇博客&#xff0c;注意版本要改成3.2.*&#xff0c;m…

神经网络:Zero2Hero 2

Zero → \to → Hero : 2 接上篇&#xff0c;Zero → \to → Hero : 1&#xff0c;进一步的扩展模型&#xff1a; 增加输入字符序列的长度&#xff0c;通过多个字符预测下一个字符的概率分布增加模型的深度&#xff0c;通过多层的MLP来学习和预测字符的生成概率增加嵌入层&…

深度学习04-CNN经典模型

简介 卷积神经网络&#xff08;CNN&#xff09;是深度学习中非常重要的一种网络结构&#xff0c;它可以处理图像、文本、语音等各种类型的数据。以下是CNN的前4个经典模型 LeNet-5 LeNet-5是由Yann LeCun等人于1998年提出的&#xff0c;是第一个成功应用于手写数字识别的卷积…

【数据结构】线性表之链表

目录 前言一、链表的定义二、链表的分类1. 单向和双向2. 带头和不带头3. 循环和不循环4. 常用&#xff08;无头单向非循环链表和带头双向循环链表&#xff09; 三、无头单向非循环链表的接口及实现1. 单链表的接口2. 接口的实现 四、带头双向循环链表接口的及实现1. 双向链表的…

磺酸基-Cy5 羧酸Sulfo-Cy5 COOH分子式C32H37N2KO8S2

Sulfo CY5 COOH是一种有机化合物&#xff0c;属于荧光染料。它具有荧光、稳定、水溶性等特点&#xff0c;因此被应用于分析化学、生物技术、药物研发等领域。Sulfo CY5 COOH的分子式为C32H37N2KO8S2&#xff0c;分子量为680.87。它的荧光波长为670nm&#xff0c;可以通过荧光显…

如何在AD中添加自定义材料单模板

AD默认的材料单格式和常用的格式有点区别&#xff0c;为了减少在材料单格式编辑的工作&#xff0c;决定添加自定义模板到AD的模板中。 1.查找AD模板的安装位置 在AD菜单Reports中&#xff0c;找到“Bill of materials”菜单&#xff0c; 点击后&#xff0c;弹出的窗口中包含了…

Kubernets1.20部署Redis7.0集群6节点三主三从(完整版)-2023.5.13

目录 一、产品选型二、草图三、部署1、安装NFS服务1&#xff09;NFS Server端安装NFS2&#xff09;创建NFS 共享点3&#xff09;启动rpcbind、nfs服务4&#xff09;验证服务配置 2、创建持久卷PVC1&#xff09;创建ServiceAccount账号2&#xff09;创建provisioner3&#xff09…

vite入坑之路:react+vite动态导入报错@vite-ignore的解决方法

正常的动态组件导入方式 webpack搭建的项目&#xff0c;不管是react还是vue通常引入动态组件基本这么写&#xff1a; const url import(../pages/${locale}) // vite不支持or const url import(../pages/${locale}/index.jsx) // vite不支持这在vite架构中&#xff0c;一般…

Vue3+vite环境变量配置

在项目开发中&#xff0c;通常来说&#xff0c;不同的环境会有不同的请求api接口&#xff0c;这就需要修改配置&#xff0c;才能满足对应的环境。所以这里就使用了环境变量。环境变量就是在不同的环境中使用不同的变量值。 # 环境变量文件(.env) 在项目根目录&#xff08;和sr…

TCP协议和相关特性

1.TCP协议的报文结构 TCP的全称为&#xff1a;Transmission Control Protocol。 特点: 有连接可靠传输面向字节流全双工 下面是TCP的报文结构&#xff1a; 源端口和目的端口&#xff1a; 源端口表示数据从哪个端口传输出来&#xff0c;目的端口表示数据传输到哪个端口去。…

FPGA_学习_03_第一个FPGA程序流水灯

学习编程&#xff0c;最重要永远就是动手&#xff0c;本文将在开发板上实现FPGA的“Hello world”→流水灯。本文主要目的是熟悉在Vivado上从零到程序运行起来的基本开发流程。 1 硬件电路介绍 本人购买的开发板接在PL端的只有2个LED灯&#xff0c;刚好达到流水灯的最低要求。…

今年这情况,大家多一手准备吧......

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

ASEMI代理MAX5048BAUT+T原装ADI车规级MAX5048BAUT+T

编辑&#xff1a;ll ASEMI代理MAX5048BAUTT原装ADI车规级MAX5048BAUTT 型号&#xff1a;MAX5048BAUTT 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;SOT-23-6 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;6 工作温度:-40C~125C 类型&a…

npx下载构建nuxt3开发模板失败的解决方案

在搭建nuxt3项目开发的时候&#xff0c;安装nuxt3开发模板的时候&#xff0c;使用命令&#xff1a; npx nuxi init my-app 会出出现一下错误&#xff1a; This is related to npm not being able to find a file. 发生上述错误是因为您有一个未正确安装的依赖项。 以下是解决…