Open In App

Rod Cutting Problem in C++

Last Updated : 23 Jul, 2025
Suggest changes
Share
Like Article
Like
Report

The Rod Cutting Problem is a classic dynamic programming problem where a rod of length N and a list of prices for smaller pieces of rod is given, and the task is to determine the maximum value obtainable by cutting up the rod and selling the pieces. The length of the rod is taken as the size of the price array.

Example

Input: prices[] = {1, 5, 8, 9, 10, 17, 17, 20}
Output: 22
Explanation: By cutting the rod into two pieces of length 2 and 6, we get a maximum price of 5 + 17 = 22.

Input: prices[] = {2, 5, 7, 8, 10}
Output: Maximum obtainable price = 12
Explanation: By cutting the rod into two pieces of length 2 and 3, we get a maximum price of 5 + 7 = 12.

In C++, rod cutting problem can be solved using the following methods:

More methods to solve the rod cutting problem are given here - Rod Cutting

Using Recursion

In this approach, we recursively compute the maximum price by trying all possible cuts at each step.

  • The basic idea is to cut into two pieces: one of length i and the other of length (n - i) where i is from 1 to n.
  • Then compute the sum of the price of the piece of length i and the maximum price obtainable from the remaining rod (n - i).
  • We repeat this for all lengths i and return the maximum value.

Code Implementation

C++
// C++ program to solve the Rod Cutting Problem using recursion #include <bits/stdc++.h> using namespace std; int cutRod(vector<int>& prices, int n) {    // Base case: when rod length is 0, the price is 0  if (n == 0) return 0;  // Initialize maximum value  int res = 0;  // Try all possible cuts and recursively get the best price  for (int i = 1; i <= n; i++) {  // Recursively calculate the maximum obtainable price  res = max(res, prices[i - 1] + cutRod(prices, n - i));  }  return res; } int main() {    // Prices array  vector<int> prices = {1, 5, 8, 9, 10, 17, 17, 20};  int rodLength = prices.size();  // Calculate and print the maximum obtainable price  cout << cutRod(prices, rodLength) << endl;  return 0; } 

Output
22 

Time Complexity: Exponential
Space Complexity: O(n) where n is the length of the price array.

This method has exponential time complexity because it leads to many redundant calculations.

Using Dynamic Programming

The cutting rod problem is ideally solved using dynamic programming due to redundant calculation. We use a to store the maximum obtainable price for each length when calculated for the first time. After that, we refer to this table instead of calculating the price again.

Code Implementation

C++
// C++ program to solve the Rod Cutting Problem #include <iostream> #include <vector> #include <algorithm> using namespace std; int cutRod(vector<int>& prices, int n) {    // dp[] will store the maximum price  // obtainable for each length  vector<int> dp(n + 1, 0);  // Build the dp array  for (int i = 1; i <= n; i++) {  int res = 0;    // Try all possible cuts  for (int j = 0; j < i; j++) {  res = max(res, prices[j]  + dp[i - j - 1]);  }  dp[i] = res;  }  // Maximum price obtainable for rod length  // n will be at dp[n]  return dp[n]; } int main() {    // Prices array  vector<int> prices = {1, 5, 8, 9, 10,  17, 17, 20};  int rodLength = prices.size();  // Calculate and print the maximum  // obtainable price  cout << cutRod(prices, rodLength) << endl;  return 0; } 

Output
22 

Time Complexity: O(n2), where n is the length of the price array.
Space Complexity: O(n)


Article Tags :

Explore