fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int optimalmerge(vector<int>files)
  5. {
  6. priority_queue<int, vector<int>, greater<int> >minHeap;
  7. priority_queue<int>maxHeap;
  8. for(int i = 0; i < files.size(); i++)
  9. {
  10. minHeap.push(files[i]);
  11. }
  12.  
  13. int totalcost = 0;
  14. while(minHeap.size() > 1)
  15. {
  16. int first = minHeap.top();
  17. minHeap.pop();
  18. int second = minHeap.top();
  19. minHeap.pop();
  20.  
  21. int mergedcost = first+second;
  22. totalcost = totalcost+mergedcost;
  23.  
  24. minHeap.push(mergedcost);
  25.  
  26. }
  27. return totalcost;
  28. }
  29.  
  30. int main()
  31. {
  32. vector<int>files = {20, 30, 10, 5, 30};
  33.  
  34. int cost = optimalmerge(files);
  35.  
  36. cout<<"Minimum Cost = "<<cost<<endl;
  37. }
  38.  
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
Minimum Cost = 205