7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
7-1 修理牧場(chǎng) (25 分)(最詳解)(最容易理解的解題過(guò)程)
農(nóng)夫要修理牧場(chǎng)的一段柵欄,他測(cè)量了柵欄,發(fā)現(xiàn)需要N塊木頭,每塊木頭長(zhǎng)度為整數(shù)L?i??個(gè)長(zhǎng)度單位,于是他購(gòu)買了一條很長(zhǎng)的、能鋸成N塊的木頭,即該木頭的長(zhǎng)度是L?i??的總和。
但是農(nóng)夫自己沒(méi)有鋸子,請(qǐng)人鋸木的酬金跟這段木頭的長(zhǎng)度成正比。為簡(jiǎn)單起見(jiàn),不妨就設(shè)酬金等于所鋸木頭的長(zhǎng)度。例如,要將長(zhǎng)度為20的木頭鋸成長(zhǎng)度為8、7和5的三段,第一次鋸木頭花費(fèi)20,將木頭鋸成12和8;第二次鋸木頭花費(fèi)12,將長(zhǎng)度為12的木頭鋸成7和5,總花費(fèi)為32。如果第一次將木頭鋸成15和5,則第二次鋸木頭花費(fèi)15,總花費(fèi)為35(大于32)。
請(qǐng)編寫(xiě)程序幫助農(nóng)夫計(jì)算將木頭鋸成N塊的最少花費(fèi)。
輸入格式:
輸入首先給出正整數(shù)N(≤10?4??),表示要將木頭鋸成N塊。第二行給出N個(gè)正整數(shù)(≤50),表示每段木塊的長(zhǎng)度。
輸出格式:
輸出一個(gè)整數(shù),即將木頭鋸成N塊的最少花費(fèi)。
輸入樣例:
8 4 5 1 2 1 3 1 1輸出樣例:
49
題目解釋:利用建造哈夫曼樹(shù)的思想? 根據(jù)葉節(jié)點(diǎn)的權(quán)值 排序(升序)(模仿最小堆) 將其所有葉節(jié)點(diǎn)的權(quán)值入隊(duì)? 當(dāng)然我們?nèi)氲氖荂++中的優(yōu)先隊(duì)列(模仿最小堆)
分享C++中 被調(diào)用的 優(yōu)先隊(duì)列類及其方法
優(yōu)先隊(duì)列具有隊(duì)列的所有特性,包括基本操作,只是在這基礎(chǔ)上添加了內(nèi)部的一個(gè)排序,它本質(zhì)是一個(gè)堆實(shí)現(xiàn)的
和隊(duì)列基本操作相同:
top 訪問(wèn)隊(duì)頭元素
empty 隊(duì)列是否為空
size 返回隊(duì)列內(nèi)元素個(gè)數(shù)
push 插入元素到隊(duì)尾 (并排序)
emplace 原地構(gòu)造一個(gè)元素并插入隊(duì)列
pop 彈出隊(duì)頭元素
swap 交換內(nèi)容
定義:priority_queue<Type, Container, Functional>
Type 就是數(shù)據(jù)類型,Container 就是容器類型(Container必須是用數(shù)組實(shí)現(xiàn)的容器,比如vector,deque等等,但不能用 list。STL里面默認(rèn)用的是vector),Functional 就是比較的方式,當(dāng)需要用自定義的數(shù)據(jù)類型時(shí)才需要傳入這三個(gè)參數(shù),使用基本數(shù)據(jù)類型時(shí),只需要傳入數(shù)據(jù)類型,默認(rèn)是大頂堆
一般是:
//升序隊(duì)列
priority_queue <int,vector<int>,greater<int> > q;
//降序隊(duì)列
priority_queue <int,vector<int>,less<int> >q;
總結(jié)
以上是生活随笔為你收集整理的7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 816减肥法是什么
- 下一篇: 7-4 二叉树的遍历!(简单) (25