A board of length m and width n is given, we need to break this board into m*n squares such that cost of breaking is minimum. cutting cost for each edge will be given for the board. In short we need to choose such a sequence of cutting such that cost is minimized.
For above board optimal way to cut into square is: Total minimum cost in above case is 42. It is evaluated using following steps. Initial Value : Total_cost = 0 Total_cost = Total_cost + edge_cost * total_pieces Cost 4 Horizontal cut Cost = 0 + 4*1 = 4 Cost 4 Vertical cut Cost = 4 + 4*2 = 12 Cost 3 Vertical cut Cost = 12 + 3*2 = 18 Cost 2 Horizontal cut Cost = 18 + 2*3 = 24 Cost 2 Vertical cut Cost = 24 + 2*3 = 30 Cost 1 Horizontal cut Cost = 30 + 1*4 = 34 Cost 1 Vertical cut Cost = 34 + 1*4 = 38 Cost 1 Vertical cut Cost = 38 + 1*4 = 42
This problem can be solved using greedy approach, If total cost is denoted by S, then S = a1w1 + a2w2 … + akwk, where wi is a cost of certain edge cutting and ai is corresponding coefficient, The coefficient ai is determined by the total number of cuts we have competed using edge wi at the end of the cutting process. Notice that sum of the coefficients are always constant, hence we want to find a distribution of ai obtainable such that S is minimum. To do so we perform cuts on highest cost edge as early as possible, which will reach to optimal S. If we encounter several edges having the same cost, we can cut any one of them first.
Below is the solution using above approach, first we sorted the edge cutting costs in reverse order, then we loop in them from higher cost to lower cost building our solution. Each time we choose an edge, counter part count is incremented by 1, which is to be multiplied each time with corresponding edge cutting cost.
Notice below used sort method, sending greater() as 3rd argument to sort method sorts number in non-increasing order, it is predefined function of the library.
This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Applications of Minimum Spanning Tree Problem
- Boruvka's algorithm for Minimum Spanning Tree
- Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
- Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
- Connect n ropes with minimum cost
- Find minimum time to finish all jobs with given constraints
- Minimum Number of Platforms Required for a Railway/Bus Station
- Minimum edges to reverse to make path from a source to a destination
- Find element using minimum segments in Seven Segment Display
- Minimum Cost Path with Left, Right, Bottom and Up moves allowed
- Minimum sum of two numbers formed from digits of an array
- Paper Cut into Minimum Number of Squares
- Reverse Delete Algorithm for Minimum Spanning Tree
- Minimum sum of absolute difference of pairs of two arrays
- Minimum cost for acquiring all coins with k extra coins allowed with every coin
- Greedy Algorithm to find Minimum number of Coins
- Find the minimum and maximum amount to buy all N candies
- Minimum Fibonacci terms with sum equal to K
- Minimum Swaps for Bracket Balancing
- Minimum rotations to unlock a circular lock
Improved By : princi singh