C++ 【填充书架】

填充书架

dp[ i ] = 放下第i 本书的最小高度

递推公式:要放第 i 本书的时候 假定前面有 j 本书在书架上,j<i ,【 j - i 】之间的书作为最上层的,算出最上层书的最小层数

本题的目的是划分成多个子数组,这类问题,我们需要考虑的是子数组中到底要有几个元素从哪里开始划分?
所以我们就可以枚举最后一个子数组中的元素个数,或者枚举最后一个子数组的起点 j,这样最后一个子数组为 nums[j…i],长度为 i-j+1

nums[j…i] 需要满足的条件时,元素(厚度)之和 不超过 shelfWidth

因此,定义 dp[i] 为 nums[0…i] 的所有划分方案中 得到的 所有子数组最大高度之和 的最小值

考虑 最后一个子数组是 nums[j…i],j 是所有可能的起点,且 nums[j…i] 元素(厚度)之和 不超过 shelfWidth

那么接下来考虑 这个 j 是需要从 0 到 i 顺序枚举呢 ? 还是 从 i 到 0 倒序枚举呢?.

对于 dp[i],nums[i] 已经确定是 最后一个元素,如果顺序枚举,没法快速知道 nums[j…i] 的厚度之和,也没法快速得到这部分书的最大高度

而如果 倒序枚举 j 从 i 到 0,用变量 w 记录 nums[i…j] 的元素厚度和,用 h 记录 nums[i…j] 的元素最大高度

class Solution {
public:int minHeightShelves(vector<vector<int>>& books, int shelfWidth) {int n=books.size();vector<int>dp(n+1,1000000);dp[0]=0;for(int i=0;i<n;++i){int num=0;int in=0;for(int j=i;j>=0;j--){num+=books[j][0];//下一个就要大于宽度  if(num>shelfWidth){break;}in=max(in,books[j][1]);dp[i+1]=min(dp[i+1],dp[j]+in);}}return dp[n];}
};

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

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

相关文章

前端学习之DOM编程案例:抽奖案例

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>抽奖案例</title><style>*{margin: 0;padding: 0;}</style> </head> <body><div id"container"&g…

搜索(DFS BFS)

DFS 常规DFS: 二叉树前序,中序&#xff0c;后序遍历-CSDN博客 void postorderTraversal(root)初始化一个空列表 arrfind访问总树(root,arr)return arrvoid find(temp, arr)if temp 为空return // 调用顺序由前中后序决定find递归访问左子树find递归访问右子树arr加入当前节点…

深入了解Flutter中的Sealed Class及其使用

Flutter Sealed Class 简介 Sealed Class 是 Dart 3 中引入的一个新特性&#xff0c;它允许您创建一组有限且封闭的类层次结构。这意味着&#xff1a; Sealed 类只能在其定义所在的同一文件中扩展。所有可能的子类在编译时都必须已知。 Sealed Class 的主要优点是&#xff1…

浅谈Redis和一些指令

浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端&#xff08;桌面程序&#xff0c;web程序&#xff09; 像这样的图形…

阿里云服务器可以干嘛?能干啥你还不知道么!

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…

速盾:cdn防止dns劫持原理

CDN&#xff08;内容分发网络&#xff09;在防止DNS劫持方面的原理主要有以下几个方面&#xff1a; 域名解析多级验证&#xff1a;CDN会在DNS服务器上设置多级域名解析验证。当用户请求访问一个网站时&#xff0c;CDN会首先从DNS服务器获取到域名的IP地址&#xff0c;并验证该I…

Flutter学习12 - SharedPreferences

1、shared_preferences 插件 类似于 Android 中的 SharedPreferences&#xff0c;键值对的形式进行本地存储 1.1、引入插件 在 pubspec.yaml 中引入 dependencies:shared_preferences: ^2.1.0在需要用到的文件中引入 import package:shared_preferences/shared_preference…

二维相位解包理论算法和软件【全文翻译- 掩码(3.4)】

本节我们将研究从质量图中提取掩码的问题。掩码是一个质量图,其像素只有两个值:0 或 1。零值像素标志着质量最低的相位值,这些相位值将被屏蔽、零权重或忽略。第 5 章中的某些 L/ 正则算法需要使用掩码来定义零权重。掩码还可用于某些路径跟踪算法,如第 4.5 节中将要介绍的…

人工智能时代呼唤科技与创新成为新榜样

人工智能时代呼唤科技与创新成为新榜样 雷军&#xff0c;好久不见&#xff01;这两天&#xff0c;你的出现仿佛为商业界注入了一股清流&#xff0c;让我深感欣慰。尽管你的目的或许只是为了推广产品&#xff0c;但你确实在这个充斥着各种卖货、卖情怀和卖道德的商业大潮中&…

基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的美发管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

秋招刷题4(动态规划)

1.购物单 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int N sc.nextInt();int m sc.nextInt();Goods[] goods new Goods[m];for(int i 0; i < m; i){goods[i] new Goods();}for(int i …

浏览器、网页及JS脚本详解

一、交互关系 当我们谈论浏览器、网页以及JavaScript代码的交互关系时&#xff0c;我们其实是在讨论现代网络应用的基石。这一主题涵盖了浏览器的内部工作机制、HTML、CSS、JavaScript之间的相互作用&#xff0c;以及这些技术是如何共同塑造用户体验的。接下来的探讨将深入这一…

9_springboot_shiro_jwt_多端认证鉴权_整合jwt

1. Shiro框架回顾 到目前为之&#xff0c;Shiro框架本身的知识点已经介绍完了。web环境下&#xff0c;整个框架从使用的角度我们需要关注的几个点&#xff1a; 要使用Shiro框架&#xff0c;就要创建核心部件securityManager 对象。 SpringBoot项目中&#xff0c;引入shiro-spr…

python小练习(ps:可评论区讨论)

1. (单选题)海龟初始坐标为&#xff08;0&#xff0c;0&#xff09;&#xff0c;让海龟往坐标原点后方移动200像素的语句是 A. turtle.penup(200)B. turtle.fd(200)C. turtle.goto(200)D. turtle.bk(200) 2. (单选题)改变海龟画笔尺寸的是 A. turtle.penwidth()B. turtle.pen…

分类预测 | Matlab实现DRN深度残差网络数据分类预测

分类预测 | Matlab实现DRN深度残差网络数据分类预测 目录 分类预测 | Matlab实现DRN深度残差网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现DRN深度残差网络数据分类预测&#xff08;完整源码和数据&#xff09;&#xff0c;运行环境为Matl…

智能数据采集API技术在电子商务跨境电商数字化转型中的核心作用|API数据采集接口的核心应用

随着科技的飞速发展和全球化的深入推进&#xff0c;数字化转型已经成为企业和社会发展的必然趋势。在这一背景下&#xff0c;智能数据采集技术作为数字化转型的核心驱动力&#xff0c;正发挥着越来越重要的作用。本文将从智能数据采集技术的定义、特点、应用场景以及对企业的影…

初识Android 属性

属性是存储在系统共享内存中的一个个key:value键值对&#xff0c;主要有以下作用: 提供系统公共的信息进程间通讯作为rc文件的触发器&#xff0c;用于行为控制 提供系统公共属性 比如获取SDK版本&#xff0c;获取系统语言其实都是通过系统属性得到的 ro.build.version.sdk30…

golang变量初始化顺序

顺序&#xff1a; 1.引用的包 2.全局变量 3.init()函数 4.main()函数 package pkgimport "fmt"func init() {fmt.Println("pkg init") }package mainimport ("fmt"_ "gg/pkg" )var v val()func val() int {fmt.Println("func()…

React Native调用Android的原生功能

React Native 通过 JavaScript 接口与原生代码通信&#xff0c;这是通过名为 Bridge 的机制实现的。Bridge 负责在 JavaScript 和原生端之间建立通信桥梁。 以下是调用 Android 原生功能的基本步骤&#xff1a; 在 JavaScript 中&#xff0c;使用 React Native 提供的模块创建…

配置Spring Boot WebSocket 客户端与前端vue实现多人通信聊天

后台引入 <!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 然后配置类配置下 Configuration public class WebSocketConfig {/…