time limit:2000ms memory limit:65536kb 64bit io format:%lld & %llu
submit
status
description
我們的小夥伴bingo真的很調皮,他在上課的路上看到樹上有個鳥窩,他就想去把他捅下來,但是鳥窩很高他夠不到,於是他就到處找木棍,想把這些木棍接在一起,然後去捅鳥窩。他一共找了n跟木棍 (1 ≤ n ≤ 20,000),每根木棍的長度為 li (1 ≤ li ≤ 50,000) 。現在他要把這n根木棍連線在一起,每次連線只能把兩根木棍連在一起,而且每連線一次都需要花費一些money去買材料,買這些材料要用的money和要連線的兩根木棍的長度之和相等(如:把長度分別為5和8的木棍連在一起,買材料就需要花13元)。bingo想要花最少的錢來買材料。我們已經知道了他找到的木棍的長度,那麼他最少要花多少錢來買材料呢??
input
第一行為bingo找到的木棍的數目n(n為整數),之後n行為每根木棍的長度。
output
bingo 所需要買材料的最少money
sample input
5 3
4 6 1 8
sample output
48hint
5 4
3 6
1 8
48 bingo第一次要把長度為1和3的木棍接在一起,需要的monye為4;
第二次要把長度為4和4的木棍接在一起,需要的money為8;
第三次要把長度為6和8的木棍接在一起,需要的money為14;
第四次要把長度為8和14的木棍接在一起,需要的money為22;
所以總共需要4+8+14+22=48;
/*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永無bug
*/#include
#include
#include
#include
using
namespace
std;
const
int max = 20000 +10 ;
struct st
}arr,ans;
int main()
priority_queueq;
for( int i=0; iscanf("%lld",&arr.a);
q.push(arr);
}long
long a,b,sum=0;
while( n >= 2 )
printf("%lld\n",sum);
}
一模一樣的體,上面的**不用改都能過。
【問題描述】
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。
因為還要花大力氣把這些果子搬回家,所以多多在合併果子時要盡可能地節省體力。假定每個果子重量都為1,並且已知果子的種類數和每種果子的數目,你的任務是設計出合併的次序方案,使多多耗費的體力最少,並輸出這個最小的體力耗費值。
例如有3種果子,數目依次為1,2,9。可以先將 1、2堆合併,新堆數目為3,耗費體力為3。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為12,耗費體力為 12。所以多多總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。
【輸入檔案】
輸入檔案fruit.in包括兩行,第一行是乙個整數n(1 <= n <= 10000),表示果子的種類數。第二行包含n個整數,用空格分隔,第i個整數ai(1 <= ai <= 20000)是第i種果子的數目。
【輸出檔案】
輸出檔案fruit.out包括一行,這一行只包含乙個整數,也就是最小的體力耗費值。輸入資料保證這個值小於231。
【樣例輸入】
3 1 2 9
【樣例輸出】
15 【資料規模】
對於30%的資料,保證有n <= 1000;
對於50%的資料,保證有n <= 5000;
對於全部的資料,保證有n <= 10000。
優先佇列例題
本文摘自部落格,歡迎前往部落格以獲得更好的體驗。有兩個長度都是 n 的序列 a 和 b 在 a 和 b 中各取乙個數相加可以得到 n 2n 2 n2個和,求這 n 2n 2 n2個和中最小的 n 個。輸入格式 第一行乙個正整數 n 第二行n個整數 a ia i ai 滿足 ai ai 1 a i l...
演算法競賽入門經典例題 優先佇列(阿格斯)
例題 阿格斯 argus 你的任務是編寫乙個稱為argus的系統。該系統是支援乙個register命令,register q num period 該命令註冊了乙個觸發器,它每秒鐘就會產生一次編號為q num的事件,你的任務是模擬出錢k個事件。如果多個事件同時發生,先處理q num小的事件 incl...
合併果子(經典優先佇列)
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和...