-
Notifications
You must be signed in to change notification settings - Fork 1
/
Minimum_Cost_of_ropes.cpp
69 lines (55 loc) · 2.22 KB
/
Minimum_Cost_of_ropes.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
Problem Statement:
------------------
There are given N ropes of different lengths, we need to connect these ropes into one rope. The cost to connect two ropes is equal to sum of their lengths.
The task is to connect the ropes with minimum cost.
Example 1:
---------
Input:
n = 4
arr[] = {4, 3, 2, 6}
Output:
29
Explanation: For example if we are given 4 ropes of lengths 4, 3, 2 and 6. We can connect the ropes in following ways.
1) First connect ropes of lengths 2 and 3. Now we have three ropes of lengths 4, 6 and 5.
2) Now connect ropes of lengths 4 and 5. Now we have two ropes of lengths 6 and 9.
3) Finally connect the two ropes and all ropes have connected.
Total cost for connecting all ropes is 5 + 9 + 15 = 29. This is the optimized cost for connecting ropes. Other ways of
connecting ropes would always have same or more cost. For example, if we connect 4 and 6 first (we get three strings of 3,
2 and 10), then connect 10 and 3 (we get two strings of 13 and 2). Finally we connect 13 and 2.
Total cost in this way is 10 + 13 + 15 = 38.
Example 2:
---------
Input:
n = 5
arr[] = {4, 2, 7, 6, 9}
Output:
62
Explanation: First, connect ropes 4 and 2, which makes the array {6,7,6,9}. Next, add ropes 6 and
6, which results in {12,7,9}. Then, add 7 and 9, which makes the array {12,16}. And finally add these two which gives {28}.
Hence, the total cost is 6 + 12 + 16 + 28 = 62.
Your Task: You don't need to read input or print anything. Your task isto complete the function minCost() which takes 2 arguments and returns the minimum cost.
Expected Time Complexity : O(nlogn)
Expected Auxilliary Space : O(n)
*/
// Link --> https://practice.geeksforgeeks.org/problems/minimum-cost-of-ropes-1587115620/1#
// Code:
class Solution
{
public:
long long minCost(long long a[], long long n)
{
priority_queue<long long, vector<long long>, greater<long long> > pq(a, a + n);
long long answer = 0;
while (pq.size() > 1)
{
long long first = pq.top();
pq.pop();
long long second = pq.top();
pq.pop();
answer += first + second;
pq.push(first + second);
}
return answer;
}
};