国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

sdutacm-樹-堆結構練習——合并果子之哈夫曼樹

2019-11-06 06:21:17
字體:
來源:轉載
供稿:網友

樹-堆結構練習——合并果子之哈夫曼樹

TimeLimit: 1000MS Memory Limit: 65536KB

SubmitStatistic

PRoblem Description

 在一個果園里,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。

每一次合并,多多可以把兩堆果子合并到一起,消耗的體力等于兩堆果子的重量之和。可以看出,所有的果子經過n-1次合并之后,就只剩下一堆了。多多在合并果子時總共消耗的體力等于每次合并所消耗體力之和。

因為還要花大力氣把這些果子搬回家,所以多多在合并果子時要盡可能地節省體力。假定每個果子重量都為1,并且已知果子的種類數和每種果子的數目,你的任務是設計出合并的次序方案,使多多耗費的體力最少,并輸出這個最小的體力耗費值。

例如有3種果子,數目依次為1,2,9。可以先將1、2堆合并,新堆數目為3,耗費體力為3。接著,將新堆與原先的第三堆合并,又得到新的堆,數目為12,耗費體力為12。所以多多總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。

 

Input

 第一行是一個整數n(1<=n<=10000),表示果子的種類數。第二行包含n個整數,用空格分隔,第i個ai(1<=ai<=20000)是第i個果子的數目。

 

Output

 輸出包括一行,這一行只包含一個整數,也就是最小的體力耗費值。輸入數據保證這個值小于2^31。

 

Example Input

3

1 2 9

Example Output

15

Hint

 

Author

 趙利強

 

1

#include <iostream>#include<string.h>#include<stdio.h>#include<queue>#include<stdlib.h>#include<algorithm>using namespace std;long long sum;int h[10002];int main(){    priority_queue<int,vector<int>,greater<int> >q;    int n,i,a,b,c;    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&h[i]);        q.push(h[i]);    }    sum = 0;    while(!q.empty())    {        a = q.top();        q.pop();        if(!q.empty())        {           b = q.top();           q.pop();           c = a+b;           q.push(c);           sum += c;        }    }    printf("%lld/n",sum);    return 0;}/***************************************************User name: jk160505徐紅博Result: AcceptedTake time: 4msTake Memory: 308KBSubmit time: 2017-02-09 09:28:57****************************************************/

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台中县| 赫章县| 丹江口市| 景德镇市| 宝清县| 称多县| 拜泉县| 敖汉旗| 若尔盖县| 开远市| 阳江市| 平舆县| 津市市| 怀宁县| 秦皇岛市| 漳平市| 林西县| 太谷县| 叙永县| 左权县| 无锡市| 南丰县| 蒙自县| 平陆县| 敦化市| 千阳县| 黔南| 修水县| 新郑市| 鄱阳县| 集贤县| 朝阳县| 友谊县| 沧源| 高台县| 会泽县| 高唐县| 达尔| 普定县| 晋城| 安义县|