网站建设技术总结,东莞室内设计公司,昆明seo优化,设计网站属于什么专业给定一个数组 books #xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。
按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。
先选几本书放在书架上#xff08;它们的厚度之和小于等于书架的宽度 shelfWidt…给定一个数组 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
提示
1 books.length 1000 1 thicknessi shelfWidth 1000 1 heighti 1000 public int minHeightShelves(int[][] books, int shelfWidth) {int length books.length;int[] dp new int[length 1];for (int i 1; i length; i) {int width0;int height0;dp[i]Integer.MAX_VALUE;for (int j i-1; j 0; j--) {if (shelfWidth(widthbooks[j][0])){break;}heightMath.max(height,books[j][1]);dp[i]Math.min(dp[i],dp[j]height);}}return dp[length];}func minHeightShelves(books [][]int, shelfWidth int) int {length : len(books)dp : make([]int,length 1)for i : 1; i length; i {width,height:0,0dp[i]math.MaxInt32for j : i-1; j 0; j-- {if widthbooks[j][0];shelfWidthwidth{break}if heightbooks[j][1] {heightbooks[j][1]}if dp[j]heightdp[i] {dp[i]dp[j]height}}}return dp[length]
}