# 题意
n堆果子,每一堆果子有重量,合并两堆果子小号的体力等于重量之和,所有的果子经过n-1次合并后就剩下一堆,最后消耗的总体力等于所有的和输出消耗的体力的最小值
# 题解
即huffman树,用堆来实现,每次取最小的两个值加起来再存入堆之中,过程累计总和
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 ios::sync_with_stdio(0); 5 cin.tie(0); 6 cout.tie(0); 7 int n; 8 cin>>n; 9 priority_queue<int,vector<int>,greater<int>>a; 10 for(int i=0;i<n;i++){ 11 int x; 12 cin>>x; 13 a.push(x); 14 } 15 int ans=0; 16 for(int i=1;i<n;i++){ 17 int x=a.top(); 18 a.pop(); 19 int y=a.top(); 20 a.pop(); 21 a.push(x+y); 22 ans+=x+y; 23 } 24 cout<<ans; 25 }
原文地址:https://www.cnblogs.com/hhyx/p/12536324.html
时间: 2024-10-28 20:30:26