【題目描述】
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。
每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。
因為還要花大力氣把這些果子搬回家,所以多多在合併果子時要盡可能地節省體力。假定每個果子重量都為1,並且已知果子的種類數和每種果子的數目,你的任務是設計出合併的次序方案,使多多耗費的體力最少,並輸出這個最小的體力耗費值。
例如有3種果子,數目依次為1,2,9。可以先將 1、2堆合併,新堆數目為3,耗費體力為3。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為12,耗費體力為 12。所以多多總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。
【輸入格式】
輸入包括兩行,第一行是乙個整數n(1 <= n <= 10000),表示果子的種類數。第二行包含n個整數,用空格分隔,第i個整數ai(1 <= ai <= 20000)是第i種果子的數目。
【輸出格式】
輸出包括一行,這一行只包含乙個整數,也就是最小的體力耗費值。輸入資料保證這個值小於2^31。
【樣例輸入】
3
1 2 9
【樣例輸出】
15【分析】
每次合併最小的兩堆。用小根堆維護。
#include #include #define maxn 10010using namespace std;
int dui[maxn];
int tot,n,ans;
void down(int x)
}void del()
void ins(int x)
}int main()
printf("%d\n",ans);
return 0;
}
送你一堆區間
按區間貪心做慣了,遇到按區間dp就傻了。實際上應該按關鍵點dp,這樣計數才更加方便。至於線段樹優化,直接把dp陣列看做線段樹是不是太。accode include include include include define maxn 500005 define mod 1000000009 def...
一堆內建函式
del 當刪除乙個物件時,python直譯器也會預設呼叫乙個方法,這個方法為 del 方法 call 乙個物件加乙個小括號可以執行該類下面的 call 方法 doc 無法被繼承 module 表示當前操作的物件在哪個模組 class 表示當前操作的物件的類是什麼 instance和ssubcclas...
演算法題一堆
演算法題 說明 這些題就不是什麼花樣了,考的是你的基礎知識怎麼樣。再聰明而沒有實學的人都將會被這些題所淘汰。1.鍊錶和陣列的區別在 2.編寫實現鍊錶排序的一種演算法。說明為什麼你會選擇用這樣的方法?3.編寫實現陣列排序的一種演算法。說明為什麼你會選擇用這樣的方法?4.請編寫能直接實現strstr 函...