#include<bits/stdc++.h>
using namespace std;
int optimalmerge(vector<int>files)
{
priority_queue<int, vector<int>, greater<int> >minHeap;
for(int i = 0; i < files.size(); i++)
{
minHeap.push(files[i]);
}
int totalcost = 0;
while(minHeap.size() > 1)
{
int first = minHeap.top();
minHeap.pop();
int second = minHeap.top();
minHeap.pop();
int mergecost = first+second;
totalcost = totalcost + mergecost;
minHeap.push(mergecost);
}
cout<<minHeap.top()<<endl;
return totalcost;
}
int main()
{
vector<int>files={10, 20, 30, 5, 30};
int cost = optimalmerge(files);
cout<<"Minimum Cost: "<<cost<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBvcHRpbWFsbWVyZ2UodmVjdG9yPGludD5maWxlcykKewogICAgcHJpb3JpdHlfcXVldWU8aW50LCB2ZWN0b3I8aW50PiwgZ3JlYXRlcjxpbnQ+ID5taW5IZWFwOwogICAgZm9yKGludCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIG1pbkhlYXAucHVzaChmaWxlc1tpXSk7CiAgICB9CgogICAgaW50IHRvdGFsY29zdCA9IDA7CiAgICB3aGlsZShtaW5IZWFwLnNpemUoKSA+IDEpCiAgICB7CiAgICAgICAgaW50IGZpcnN0ID0gbWluSGVhcC50b3AoKTsKICAgICAgICBtaW5IZWFwLnBvcCgpOwogICAgICAgIGludCBzZWNvbmQgPSBtaW5IZWFwLnRvcCgpOwogICAgICAgIG1pbkhlYXAucG9wKCk7CgogICAgICAgIGludCBtZXJnZWNvc3QgPSBmaXJzdCtzZWNvbmQ7CiAgICAgICAgdG90YWxjb3N0ID0gdG90YWxjb3N0ICsgbWVyZ2Vjb3N0OwoKICAgICAgICBtaW5IZWFwLnB1c2gobWVyZ2Vjb3N0KTsKICAgIH0KICAgIGNvdXQ8PG1pbkhlYXAudG9wKCk8PGVuZGw7CiAgICByZXR1cm4gdG90YWxjb3N0Owp9CgppbnQgbWFpbigpCnsKICAgIHZlY3RvcjxpbnQ+ZmlsZXM9ezEwLCAyMCwgMzAsIDUsIDMwfTsKCiAgICBpbnQgY29zdCA9IG9wdGltYWxtZXJnZShmaWxlcyk7CgogICAgY291dDw8Ik1pbmltdW0gQ29zdDogIjw8Y29zdDw8ZW5kbDsKfQo=