Challenge - 5 Problems
Rod Cutting Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of Recursive Rod Cutting
What is the output of the following TypeScript code that uses a recursive approach to solve the rod cutting problem for a rod of length 4?
DSA Typescript
function cutRod(prices: number[], n: number): number {
if (n <= 0) return 0;
let maxVal = -Infinity;
for (let i = 1; i <= n; i++) {
maxVal = Math.max(maxVal, prices[i - 1] + cutRod(prices, n - i));
}
return maxVal;
}
const prices = [1, 5, 8, 9];
const length = 4;
console.log(cutRod(prices, length));Attempts:
2 left
💡 Hint
Think about all possible ways to cut the rod and sum prices.
✗ Incorrect
The maximum revenue for length 4 is 10, achieved by cutting into lengths 2 and 2 (5 + 5).
❓ Predict Output
intermediate2:00remaining
Output of Memoized Rod Cutting
What is the output of this TypeScript code using memoization for rod cutting with prices [2, 5, 7, 8] and rod length 3?
DSA Typescript
function memoizedCutRod(prices: number[], n: number, memo: number[] = []): number {
if (n <= 0) return 0;
if (memo[n] !== undefined) return memo[n];
let maxVal = -Infinity;
for (let i = 1; i <= n; i++) {
maxVal = Math.max(maxVal, prices[i - 1] + memoizedCutRod(prices, n - i, memo));
}
memo[n] = maxVal;
return maxVal;
}
const prices = [2, 5, 7, 8];
const length = 3;
console.log(memoizedCutRod(prices, length));Attempts:
2 left
💡 Hint
Memoization stores results to avoid repeated work.
✗ Incorrect
Maximum revenue for length 3 is 12, by cutting into lengths 1 and 2 (2 + 5) or length 3 (7) plus smaller cuts.
🔧 Debug
advanced2:00remaining
Identify the Error in Bottom-Up Rod Cutting
What error does this TypeScript code produce when trying to solve the rod cutting problem using bottom-up dynamic programming?
DSA Typescript
function bottomUpCutRod(prices: number[], n: number): number {
const dp = new Array(n + 1).fill(0);
for (let j = 1; j <= n; j++) {
let maxVal = -Infinity;
for (let i = 1; i <= j; i++) {
maxVal = Math.max(maxVal, prices[i] + dp[j - i]);
}
dp[j] = maxVal;
}
return dp[n];
}
const prices = [1, 5, 8, 9];
const length = 4;
console.log(bottomUpCutRod(prices, length));Attempts:
2 left
💡 Hint
Check array indexing carefully inside the inner loop.
✗ Incorrect
The code uses prices[i] but prices is zero-indexed, so prices[4] is undefined causing TypeError.
❓ Predict Output
advanced2:00remaining
Output of Bottom-Up Rod Cutting Corrected
What is the output of this corrected bottom-up rod cutting code for prices [1, 5, 8, 9] and rod length 4?
DSA Typescript
function bottomUpCutRod(prices: number[], n: number): number {
const dp = new Array(n + 1).fill(0);
for (let j = 1; j <= n; j++) {
let maxVal = -Infinity;
for (let i = 1; i <= j; i++) {
maxVal = Math.max(maxVal, prices[i - 1] + dp[j - i]);
}
dp[j] = maxVal;
}
return dp[n];
}
const prices = [1, 5, 8, 9];
const length = 4;
console.log(bottomUpCutRod(prices, length));Attempts:
2 left
💡 Hint
Bottom-up builds solutions from smaller lengths up to n.
✗ Incorrect
The maximum revenue for length 4 is 10, achieved by cutting into two pieces of length 2 (5 + 5).
🧠 Conceptual
expert2:00remaining
Time Complexity of Rod Cutting Algorithms
Which statement correctly describes the time complexity of the naive recursive, memoized, and bottom-up solutions for the rod cutting problem of length n?
Attempts:
2 left
💡 Hint
Consider how many subproblems each approach solves and how often.
✗ Incorrect
Naive recursion solves overlapping subproblems repeatedly causing exponential time. Memoization and bottom-up solve each subproblem once, each taking O(n^2) time due to nested loops.