Given a rod of length L, the task is to cut the rod in such a way that the total number of segments of length p, q and r is maximized. The segments can only be of length p, q, and r.
Input: l = 11, p = 2, q = 3, r = 5
Segments of 2, 2, 2, 2 and 3
Input: l = 7, p = 2, q = 5, r = 5
Segments of 2 and 5
Approach: Dynamic Programming is used to solve this problem. Initialize dp array to 0. Iterate till the length of the rod. For every i, a cut of p, q and r if possible is done. Initialize ans[i+p] = max( ans[i+p], 1 + ans[i]), ans[i+q] = max(ans[i+q], 1 + ans[i]) and ans[i+r] = max(ans[i+r], 1 + ans[i]) for all the possible cuts. ans[i] will be 0 if a cut at i-th index is not possible. ans[l] will give the maximum number of cuts possible.
Below is the implementation of the above approach:
Time Complexity: O(N)
- Divide an array into k segments to maximize maximum of segment minimums
- Maximum length of segments of 0's and 1's
- LCS formed by consecutive segments of at least length K
- Klee's Algorithm (Length Of Union Of Segments of a line)
- Given n line segments, find if any two segments intersect
- Maximum number of segments of lengths a, b and c
- Number of segments where all elements are greater than X
- Check if a large number can be divided into two or more segments of equal sum
- Finding the number of triangles amongst horizontal and vertical line segments
- Number of horizontal or vertical line segments to connect 3 points
- Minimum number of segments required such that each segment has distinct elements
- Maximize a given unsigned number number by swapping bits at it's extreme positions.
- Maximize the number of subarrays with XOR as zero
- Maximize the number by rearranging bits
- Maximize number of 0s by flipping a subarray
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : vt_m