7 7 修理牧場 25分 嗯嗯

2021-10-10 11:25:04 字數 1004 閱讀 8570

農夫要修理牧場的一段柵欄,他測量了柵欄,發現需要n塊木頭,每塊木頭長度為整數li​​ 個長度單位,於是他購買了一條很長的、能鋸成n塊的木頭,即該木頭的長度是li​​ 的總和。

但是農夫自己沒有鋸子,請人鋸木的酬金跟這段木頭的長度成正比。為簡單起見,不妨就設酬金等於所鋸木頭的長度。例如,要將長度為20的木頭鋸成長度為8、7和5的三段,第一次鋸木頭花費20,將木頭鋸成12和8;第二次鋸木頭花費12,將長度為12的木頭鋸成7和5,總花費為32。如果第一次將木頭鋸成15和5,則第二次鋸木頭花費15,總花費為35(大於32)。

請編寫程式幫助農夫計算將木頭鋸成n塊的最少花費。

輸入格式:

輸入首先給出正整數n(≤10 ​4 ​​ ),表示要將木頭鋸成n塊。第二行給出n個正整數(≤50),表示每段木塊的長度。

輸出格式:

輸出乙個整數,即將木頭鋸成n塊的最少花費。

輸入樣例:

84 5 1 2 1 3 1 1

輸出樣例:

49思路

木頭還沒鋸出來的,後來幾次鋸,每鋸一次就算一次錢,所以木頭長度越長的越早鋸斷出來就好,我們把一段木頭鋸斷成兩段花的錢作為二叉樹根結點的權值,鋸斷成的兩段木頭再鋸斷又要花自身重量的錢,把它作為其權值,以此類推,我們考慮這是二叉樹有關問題,在草稿紙上一驗證~哈夫曼樹,求出哈夫曼樹的最小帶權路徑長即可。我們可以用優先佇列操作。

**

#include

using

namespace std;

intmain()

int sum =0;

while

(p.size()

>1)

cout << sum;

}

7 6 還原二叉樹 25分 嗯嗯

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入格式 輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出格式 輸出為乙個整數,即該二叉樹的高度。輸入樣例 9abdfghiec fdhgib...

5 29 修理牧場 25分

農夫要修理牧場的一段柵欄,他測量了柵欄,發現需要n塊木頭,每塊木頭長度為整數li i 個長度單位,於是他購買了一條很長的 能鋸成n塊的木頭,即該木頭的長度是li 的總和。但是農夫自己沒有鋸子,請人鋸木的酬金跟這段木頭的長度成正比。為簡單起見,不妨就設酬金等於所鋸木頭的長度。例如,要將長度為20的木頭...

5 5 修理牧場 25分

5 5 修理牧場 25分 農夫要修理牧場的一段柵欄,他測量了柵欄,發現需要nn塊木頭,每塊木頭長度為整數l il i 個長度單位,於是他購買了一條很長的 能鋸成nn塊的木頭,即該木頭的長度是l il i 的總和。但是農夫自己沒有鋸子,請人鋸木的酬金跟這段木頭的長度成正比。為簡單起見,不妨就設酬金等於...