日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)

發(fā)布時(shí)間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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;

//哈夫曼樹(shù) #include<bits/stdc++.h> using namespace std; int main(){priority_queue <int,vector<int>,greater<int> > q;//優(yōu)先隊(duì)列 中 升序隊(duì)列int N,i,j,k,a[10000],d[10000],sum=0;scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&a[i]);}for(i=0;i<N;i++){q.push(a[i]);}while(!q.empty()&&q.size()!=1){int temp1= q.top();//先訪問(wèn) 再?gòu)棾?q.pop();int temp2= q.top();q.pop();int temp=temp1+temp2;sum+=temp;q.push(temp);} printf("%d",sum); }

總結(jié)

以上是生活随笔為你收集整理的7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。