贪心算法,因为结果只需要输出总和,所以在实际代码中省去了哈夫曼树的构建。 #include <iostream> #include <queue> using namespace std; priority_queue<int,vector<int>,greater<vector<int>::value_type>> for_huff_tree; int main() { int length,N; __int64 ans=0; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d",&length); for_huff_tree.push(length); } int temp1,temp2; for(int i=1;i<N;i++) { temp1=for_huff_tree.top(); for_huff_tree.pop(); temp2=for_huff_tree.top(); for_huff_tree.pop(); ans+=temp1+temp2; for_huff_tree.push(temp1+temp2); } printf("%I64d/n",ans); return 0; }