oj題目 堆石塊 貪心演算法

2021-10-10 11:33:21 字數 1242 閱讀 2789

題目描述

小k沒事幹,他要搬磚頭,為了達到較好的**效果,教練規定的方式很特別:

每一次,小k可以把兩堆磚頭合併到一起,消耗的體力等於兩堆磚頭的重量之和。 經過 n-1次合併後,

就只剩下一堆了。小k在搬磚頭時總共消耗的體力等於每次合併所耗體力之和。小k為了偷懶,希望耗費的體力最小。 例如有 3堆磚頭,數目依次為

1、2、9 。可以先將 1 、 2 堆合併,新堆數目為3 ,耗費體力為 3 。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為 12

,耗費體力為12 。所以總共耗費體力 =3+12=15。可以證明 15為最小的體力耗費值。

輸入要求

共兩行。 第一行是乙個整數 n(1≤n≤1000) ,表示磚頭堆數。 第二行n個整數,每個整數表示每堆磚頭的磚頭塊數。

輸出要求

乙個整數,也就是最小的體力耗費值。

輸入樣例

3

1 2 9

輸出樣例

貪心演算法,每次都選擇最小的兩個數,進行組合。

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

20005

;int l[maxn]

;int

main()

else

if(l[i]

int t=l[min1]

+l[min2]

; ans+

=t;if

(min1==n-1)

swap

(min1,min2)

; l[min1]

=t; l[min2]

=l[n-1]

; n--;}

printf

("%lld\n"

,ans)

;return0;

}

貪心 02 貪心演算法題目解析

122.買賣 的最佳時機 ii 134.加油站 給定乙個陣列,它的第 i 個元素是一支給定 第 i 天的 設計乙個演算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易 多次買賣一支 注意 你不能同時參與多筆交易 你必須在再次購買前 掉之前的 示例 1 輸入 7,1,5,3,6,4 輸出 7...

oj 75 貪心演算法

include include include using namespace std struct sadata 1001 intcmp const sa a,const sa b intmain sort data,data n,cmp for i 0 i else printf 3f n su...

貪心演算法及相關題目(一)

一 貪心演算法概念 貪心演算法通過做出一系列選擇來求出問題的最優解,在每個決策點,它做出在當時看來最佳的選擇。由此可見,貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇,但是對許多問題它都所得到的解都是全域性最優解。二 相關題目 第一題 sicily 1198.subst...