文章目录

  • 1. 题目
  • 2. 解题

1. 题目

附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上。

你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为 books[i][1]

顺序 将这些书摆放到总宽度为 shelf_width 的书架上。

先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelf_width),然后再建一层书架。重复这个过程,直到把所有的书都放在书架上。

需要注意的是,在上述过程的每个步骤中,摆放书的顺序与你整理好的顺序相同
例如,如果这里有 5 本书,那么可能的一种摆放情况是:第一和第二本书放在第一层书架上,第三本书放在第二层书架上,第四和第五本书放在最后一层书架上。

每一层所摆放的书的最大高度就是这一层书架的层高,书架整体的高度为各层高之和。

以这种方式布置书架,返回书架整体可能的最小高度

示例:

输入:books = [[1,1],[2,3],[2,3],[1,1],[1,1],[1,1],[1,2]], shelf_width = 4
输出:6
解释:
3 层书架的高度和为 1 + 3 + 2 = 6 。
第 2 本书不必放在第一层书架上。提示:
1 <= books.length <= 1000
1 <= books[i][0] <= shelf_width <= 1000
1 <= books[i][1] <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/filling-bookcase-shelves
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 注意题目说必须按照顺序摆放
  • dp[i] 表示 i 书籍在该层的最右边时,书架的最小高度
class Solution {public:int minHeightShelves(vector<vector<int>>& books, int shelf_width) {int n = books.size();vector<int> dp(n+1, INT_MAX);dp[0] = 0;//没有书的时候for(int i = 1; i <= n; ++i){int w = 0, h = 0;for(int j = i; j > 0; --j){if(w+books[j-1][0] <= shelf_width){    // 这一层还能放前面的书h = max(h, books[j-1][1]);//这层的高度w += books[j-1][0];//这层的宽度dp[i] = min(dp[j-1]+h, dp[i]);//     上一层的最右侧是 j-1 书籍,最低书架高度是 dp[j-1]//   加上当前层的高度 h }elsebreak;}}return dp[n];}
};

4 ms 7.6 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1105. 填充书架(DP)相关推荐

  1. leetcode - 1105. 填充书架

    1105. 填充书架 -------------------------------------------- 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上. 你把 ...

  2. 105. 填充书架-M

    1105. 填充书架-M label: dp.暴力 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上. 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i ...

  3. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  4. LeetCode 72. 编辑距离(DP)

    1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...

  5. Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)

    Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game) 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需 ...

  6. leetcode算法题--填充书架★★

    原题链接:https://leetcode-cn.com/problems/filling-bookcase-shelves/ 动态规划 dp[i]表示第i本书之前最小高度 状态转移: dp[i]=m ...

  7. leetcode1105. 填充书架(动态规划)

    附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上. 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为 bo ...

  8. LeetCode 198. 打家劫舍(DP)

    1. 题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...

  9. LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)

    文章目录 1. 题目 2. 解题 2.1 递归 2.2 queue循环 2.3 利用next循环 1. 题目 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则 ...

最新文章

  1. 如何在Eclipse中开启代码自动提示功能
  2. 有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?...
  3. ASP.NET中AJAX的UpdatePannel控件的用法
  4. SpringBoot - 优雅的实现【应用启动参数校验】
  5. 整型的赋值超出该类型的取值范围
  6. 从状态转移看:载波侦听多路访问/冲突避免(CSMA/CA)
  7. android 获取蓝牙设备id_【报Bug】安卓平台获取不到蓝牙设备服务列表(ios可以)...
  8. 写接口是什么意思啊_input是什么接口?了解这个小常识,以后接线更容易
  9. 使用Seaborn和Pandas进行数据可视化
  10. nyist 2 括号配对问题
  11. html5 成语连连看,全国通用五年级下册语文讲义-阅读与作文:学写读后感(含答案)[参考].pdf...
  12. 如何求递归算法的时间复杂度
  13. 掌握6大技巧,让python编程健步如飞!
  14. java session 使用_浅谈Session的使用(原创)
  15. 2021年王道考研计算机408【新课】
  16. 网络安全篇 全局ACL与URPF-12
  17. 微软的SqlHelper做数据层(一)
  18. Foxmail发送邮件,发送邮件工具类
  19. 谷歌跟oracle_Google vs Oracle –判决临近,Oracle的知识产权案件步履蹒跚
  20. iOS 各种技术点网址

热门文章

  1. amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!
  2. python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法
  3. 机器学习之数理统计与参数估计的相关知识总结
  4. JS_14 执行上下文与执行上下文栈
  5. kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...
  6. mysql select 子查询_SELECT中常用的子查询操作
  7. 5G毫米波三大自然缺陷
  8. spring restTemplate使用方法
  9. 转!!ftp的主动模式(port)与被动模式(PASV)
  10. 高阶篇:8.1)开模前评审及提交资料;