网站右侧虚代码家具设计培训
news/
2025/10/3 12:47:23/
文章来源:
网站右侧虚代码,家具设计培训,自己做的网站如何兼容,宁波住房和城乡建设官网填充书架
dp[ i ] 放下第i 本书的最小高度
递推公式#xff1a;要放第 i 本书的时候 假定前面有 j 本书在书架上#xff0c;ji #xff0c;【 j - i 】之间的书作为最上层的#xff0c;算出最上层书的最小层数
本题的目的是划分成多个子数组#xff0c;这类问题 放下第i 本书的最小高度
递推公式要放第 i 本书的时候 假定前面有 j 本书在书架上ji 【 j - i 】之间的书作为最上层的算出最上层书的最小层数
本题的目的是划分成多个子数组这类问题我们需要考虑的是子数组中到底要有几个元素从哪里开始划分 所以我们就可以枚举最后一个子数组中的元素个数或者枚举最后一个子数组的起点 j这样最后一个子数组为 nums[j…i]长度为 i-j1
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(vectorvectorint books, int shelfWidth) {int nbooks.size();vectorintdp(n1,1000000);dp[0]0;for(int i0;in;i){int num0;int in0;for(int ji;j0;j--){numbooks[j][0];//下一个就要大于宽度 if(numshelfWidth){break;}inmax(in,books[j][1]);dp[i1]min(dp[i1],dp[j]in);}}return dp[n];}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925905.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!