国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【算法】Filling Bookcase Shelves 填充書架

這篇具有很好參考價值的文章主要介紹了【算法】Filling Bookcase Shelves 填充書架。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Filling Bookcase Shelves 填充書架

問題描述:

給定一個數(shù)組 books ,其中 b o o k s [ i ] = [ t h i c k n e s s i , h e i g h t i ] books[i] = [thicknessi, heighti] books[i]=[thicknessi,heighti] 表示第 i 本書的厚度和高度。你也會得到一個整數(shù) shelfWidth 。

按順序 將這些書擺放到總寬度為 shelfWidth 的書架上。

先選幾本書放在書架上(它們的厚度之和小于等于書架的寬度 shelfWidth ),然后再建一層書架。重復這個過程,直到把所有的書都放在書架上。

需要注意的是,在上述過程的每個步驟中,擺放書的順序與給定圖書數(shù)組 books 順序相同。

例如,如果這里有 5 本書,那么可能的一種擺放情況是:第一和第二本書放在第一層書架上,第三本書放在第二層書架上,第四和第五本書放在最后一層書架上。
每一層所擺放的書的最大高度就是這一層書架的層高,書架整體的高度為各層高之和。

以這種方式布置書架,返回書架整體可能的最小高度

books.length , thickness[i],height[i] ,shelfWidth 范圍[1,1000]

分析

問題本身是一個具象的書架問題,書本以數(shù)組的結(jié)構(gòu)給出,而且限制必須是連續(xù)的。

也就是說要對數(shù)組劃分組,每一組的要求是厚度累加不超過書架的寬度 s h e l f w i d t h shelfwidth shelfwidth,同時該層書架的高度是由這一組書中最高的高度決定的。

因為有順序的限制,問題的難度就小了。

要求計算書架的最小高度。

如果要書架高度最小,最理想的情況,就是一層, h i g h = m a x b o o k high=maxbook high=maxbook。

但是由于width的限制,所以每一層的 b o o k book book數(shù)量也是由 w i d t h width width限制

從0開始計算,如果 0 → i ? 1 0\rightarrow i-1 0i?1已經(jīng)放好,此時為 x x x層, x x x層的高度為 h 1 h1 h1,那么 b o o k [ i ] book[i] book[i]就是新一層的第一本,此刻書架高度就是 h 1 + b o o k [ i ] . h i g h h1+book[i].high h1+book[i].high。

定義一個 f [ i ] , f [ i ] 表示 0 → i 本書放完時,書架的最小高度 f[i],f[i]表示 0\rightarrow i本書放完時,書架的最小高度 f[i],f[i]表示0i本書放完時,書架的最小高度。

b o o k [ i ] book[i] book[i]為最后一層的第1本, f [ i ] = f [ i ? 1 ] + b o o k [ i ] . h i g h f[i]= f[i-1]+book[i].high f[i]=f[i?1]+book[i].high,

b o o k [ i ] book[i] book[i]為最后一層的第2本, f [ i ] = f [ i ? 2 ] + m a x ( b o o k [ i ] . h i g h , b o o k [ i ? 1 ] . h i g h ) f[i]= f[i-2]+ max(book[i].high,book[i-1].high) f[i]=f[i?2]+max(book[i].high,book[i?1].high),可以推出
f [ i ] = f [ j ? 1 ] + m a x ( j ? i ) , ∑ j < = p < = i b o o k [ p ] < w i d t h f[i] = f[j-1]+max(j~i), \sum_{j<=p<=i}{book[p]}<width f[i]=f[j?1]+max(j?i),j<=p<=i?book[p]<width

代碼

class Solution {
    public int minHeightShelves(int[][] books, int shelfWidth) {
        int n = books.length;
        int[] dp = new int[n + 1];
        Arrays.fill(dp, 1000000);
        dp[0] = 0;
        for (int i = 0; i < n; ++i) {
            int maxHeight = 0, curWidth = 0;
            for (int j = i; j >= 0; --j) {
                curWidth += books[j][0];
                if (curWidth > shelfWidth) {
                    break;
                }
                maxHeight = Math.max(maxHeight, books[j][1]);
                dp[i + 1] = Math.min(dp[i + 1], dp[j] + maxHeight);
            }
        }
        return dp[n];
    }
} 

時間復雜度 O( N 2 N^{2} N2) 空間復雜度: O ( N ) O(N) O(N)

Tag

Array Dynamic Programming文章來源地址http://www.zghlxwxcb.cn/news/detail-473426.html

到了這里,關(guān)于【算法】Filling Bookcase Shelves 填充書架的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • ssm基于微信小程序的電子書架的設計與開發(fā)(程序+開題)

    ssm基于微信小程序的電子書架的設計與開發(fā)(程序+開題)

    本系統(tǒng)(程序 + 源碼)帶文檔 lw 萬字以上 文末可獲取一份本項目的 java 源碼和數(shù)據(jù)庫參考。 研究背景: 隨著移動互聯(lián)網(wǎng)的快速發(fā)展,人們對于閱讀的需求也越來越高。傳統(tǒng)的紙質(zhì)書籍雖然具有獨特的魅力,但受限于攜帶和存儲的不便,無法滿足現(xiàn)代人快節(jié)奏的生活方式。因

    2024年01月20日
    瀏覽(22)
  • 【計算機圖形學 】掃描線多邊形填充算法 | OpenGL+鼠標交互

    【計算機圖形學 】掃描線多邊形填充算法 | OpenGL+鼠標交互

    傳送門 實現(xiàn)多邊形掃描線填充算法,并和鼠標進行交互。 具體原理略過,會貼上完整代碼,可直接運行。 環(huán)境: vs2019,OpenGL的庫(可以搜索如何用vs使用OpenGL的庫,可以使用vs自帶的插件或者其他方法,很方便) 要點: 1.NET和AET的創(chuàng)建,改動 2.改變鼠標點擊和鼠標拖拽的響應

    2023年04月08日
    瀏覽(100)
  • 【教3妹學編程-算法題】117. 填充每個節(jié)點的下一個右側(cè)節(jié)點指針 II

    【教3妹學編程-算法題】117. 填充每個節(jié)點的下一個右側(cè)節(jié)點指針 II

    2哥 : 3妹,聽說你昨天去面試了,怎么樣?。?3妹 :嗨,別提了,讓我回去等通知,估計是沒有通知了, 還浪費我請了一天假。 2哥 : 你又請假了啊, 你是怎么跟你那個嚴厲的老板請假的。 3妹 :我說我2哥生病了,嘿嘿~ 2哥 :一猜就是說我生病了,自從你找工作,我這一年

    2024年02月05日
    瀏覽(27)
  • Origin曲線填充繪圖 填充范圍線外的區(qū)域

    Origin曲線填充繪圖 填充范圍線外的區(qū)域

    問題 :如果繪制一條曲線,給其設置上下兩個閾值,填充閾值外的區(qū)域,如圖: 錯誤 :Origin曲線填充只能識別兩個對象,如果只選中曲線-填充,填充會特別混亂,無法填充自己想要的區(qū)域: 解決 :只能通過添加圖層,將曲線繪制兩遍,與兩條虛線各分組成一個圖層(2個圖

    2023年04月12日
    瀏覽(24)
  • 禁止瀏覽器自動填充密碼功能,設置自動填充背景色。

    禁止瀏覽器自動填充密碼功能,設置自動填充背景色。

    text設置autocomplete=“off” password設置 autocomplete=“new-password” 兩個一起設置,就不會自動填充了。 自動填充后,陰影顏色變?yōu)楹谏?需要設置為0,不顯示陰影。 設置完后,自動填充沒有陰影了。

    2024年02月16日
    瀏覽(28)
  • 計算機圖形學06:中點Bresenham畫圓(并填充邊界,例如:邊界用紅色,內(nèi)部用綠色填充)

    計算機圖形學06:中點Bresenham畫圓(并填充邊界,例如:邊界用紅色,內(nèi)部用綠色填充)

    作者 :非妃是公主 專欄 :《計算機圖形學》 博客地址 :https://blog.csdn.net/myf_666 個性簽:順境不惰,逆境不餒,以心制境,萬事可成。——曾國藩 專欄名稱 專欄地址 軟件工程 專欄——軟件工程 計算機圖形學 專欄——計算機圖形學 操作系統(tǒng) 專欄——操作系統(tǒng) 軟件測試 專

    2024年01月24日
    瀏覽(20)
  • 公共字段自動填充工具

    1、問題描述 在新增員工時需要設置創(chuàng)建時間、創(chuàng)建人、修改時間、修改人等字段,在編輯員工時需要設置修改時間和修改人等字段。這些字段屬于公共字段,也就是很多表中都有這些字段,如下(示例): 字段 類型 create_time datetime update_time datetime create_user bigint update_user bi

    2024年02月16日
    瀏覽(86)
  • DolphinDb時序自動填充

    語法 asFreq(X, rule, [closed], [label], [origin=’start_day’]) 參數(shù) X?是有時間類型索引的矩陣(由?setIndexedMatrix!?創(chuàng)建)或序列(由?setIndexedSeries!?創(chuàng)建)。 rule?可以是一個字符串,可取以下值,亦可為一個時間類型的向量。 Y參數(shù)取值 對應DolphinDB函數(shù) “B” businessDay “W” weekEnd “

    2024年02月08日
    瀏覽(16)
  • EXCLE下載并填充數(shù)據(jù)

    自定義EXCEL模板,通過OLE的方式寫入數(shù)據(jù) 實現(xiàn)原理1: 主要用到以下三步,通過SMW0上傳EXCEL模板,調(diào)用函數(shù)DOWNLOAD_WEB_OBJECT下載模板;定義對象參考OLE2_OBJECT,調(diào)用其中’Open’的方法打開EXCEL,最后通過定位單元格將數(shù)據(jù)寫進去.( 示例代碼2會顯示excle的讀寫過程,在讀寫過程中

    2024年02月11日
    瀏覽(12)
  • springboot整合Excel填充數(shù)據(jù)

    springboot整合Excel填充數(shù)據(jù)

    ? 注意模板里面與上面相比是多了.的 與上面一樣,省略。 即有多組數(shù)據(jù)填充,又有單一數(shù)據(jù)填充 。? 同上。 水平填充和多組填充模板一樣,不一樣的地方在于,填充時需要通過 FillConfig 對象設置水平填充。 ? 同上 EasyExcel 入口類,用于構(gòu)建開始各種操作; ExcelReaderBuilder

    2024年02月10日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包