网络教室网站建设,flashfxp 上传网站,杭州关键词自动排名,焦作企业网站建设填充书架
力扣链接#xff1a;1105. 填充书架
题目描述
给定一个数组 books #xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。
按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。
先选几本书放在书架…填充书架
力扣链接1105. 填充书架
题目描述
给定一个数组 books 其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。
按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。
先选几本书放在书架上它们的厚度之和小于等于书架的宽度 shelfWidth 然后再建一层书架。重复这个过程直到把所有的书都放在书架上。
需要注意的是在上述过程的每个步骤中摆放书的顺序与你整理好的顺序相同。
例如如果这里有 5 本书那么可能的一种摆放情况是第一和第二本书放在第一层书架上第三本书放在第二层书架上第四和第五本书放在最后一层书架上。 每一层所摆放的书的最大高度就是这一层书架的层高书架整体的高度为各层高之和。
以这种方式布置书架返回书架整体可能的最小高度。
示例1
输入books [[1,1],[2,3],[2,3],[1,1],[1,1],[1,1],[1,2]], shelfWidth 4 输出6 解释 3 层书架的高度和为 1 3 2 6 。 第 2 本书不必放在第一层书架上。
示例2
输入: books [[1,3],[2,4],[3,2]], shelfWidth 6 输出: 4
Java代码
class Solution {public int minHeightShelves(int[][] books, int shelfWidth) {int[] dp new int[books.length 1];for (int i 0; i books.length; i) {dp[i 1] Integer.MAX_VALUE;int width 0, maxHeight 0;for (int j i; j 0; j--) {if (shelfWidth (width books[j][0])) {break;}maxHeight Math.max(maxHeight, books[j][1]);dp[i 1] Math.min(dp[i 1], dp[j] maxHeight);}}return dp[dp.length - 1];}
}来源力扣LeetCode 链接https://leetcode.cn/problems/filling-bookcase-shelves 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。