Rod cutting problem
The problem
Given a rod of length N inches and an array price[] where price[i] denotes the value of a piece of rod of length i inches (1-based indexing). Determine the maximum value obtainable by cutting up the rod and selling the pieces. Make any number of cuts, or none at all, and sell the resulting pieces.
Input: price = [1, 6, 8, 9, 10, 19, 7, 20], N = 8 Output: 25 Explanation: Cut the rod into lengths of 2 and 6 for a total price of 6 + 19= 25.
Input: price = [1, 5, 8, 9], N = 4 Output: 10 Explanation: Cut the rod into lengths of 2 and 2 for a total price of 5 + 5 = 10.
Input: price = [5, 5, 8, 9, 10, 17, 17, 20], N = 8
- 1 ≤ N ≤ 1000
- 1 ≤ price[i] ≤ 105
cpp
class Solution{
public:
int rodCutting(vector<int> price, int n) {
}
};java
class Solution{
public int RodCutting(int price[], int n) {
}
}python
class Solution:
def RodCutting(self, price, n):javascript
class Solution {
RodCutting(price, n) {
}
}csharp
class Solution
{
public int RodCutting(int[] price, int n)
{
}
}go
func RodCutting(price []int, n int) int {
}Stuck? Show a way to structure it+
- 01Let dp[len] be the best revenue for a rod of length len.
- 02For every allowed piece length, consider taking it plus dp of the remainder.
- 03Allow reusing the same piece length.
- 04Return dp[N].
Reference answer
Then expect these follow-ups
How would you return the actual cut lengths?
Tests: DP reconstruction
Why is this equivalent to unbounded knapsack?
Tests: problem reduction
Free to read · better with Enzo
Practice this out loud with Enzo
Enzo runs it as a mock interview, pushes back with follow-ups, and grades you on the rubric.
Next question