Minimum Cost for Cutting Cake I - Problem
Minimum Cost for Cutting Cake

Imagine you're a pastry chef tasked with cutting a large m × n rectangular cake into individual 1 × 1 pieces for serving. Each cut you make has a specific cost depending on which line you cut along.

You are given:
• A cake of dimensions m × n
• An array horizontalCut of size m-1, where horizontalCut[i] is the cost to make a horizontal cut along line i
• An array verticalCut of size n-1, where verticalCut[j] is the cost to make a vertical cut along line j

Goal: Find the minimum total cost to cut the entire cake into 1 × 1 pieces.

Key insight: The order of cuts matters! When you make a cut, it affects multiple pieces simultaneously, so making expensive cuts early (when they affect fewer pieces) is better than making them late (when they affect many pieces).

Input & Output

example_1.py — Basic 3×2 Cake
$ Input: m = 3, n = 2, horizontalCut = [1, 3], verticalCut = [5]
Output: 13
💡 Note: We have a 3×2 cake. Optimal cutting order: 1) Make vertical cut (cost 5×1=5), now we have 2 vertical strips. 2) Make horizontal cut at cost 3 (cost 3×2=6), now we have 4 pieces. 3) Make horizontal cut at cost 1 (cost 1×2=2), final result. Total: 5+6+2=13
example_2.py — Square 2×2 Cake
$ Input: m = 2, n = 2, horizontalCut = [7], verticalCut = [4]
Output: 11
💡 Note: We have a 2×2 cake. Since horizontal cut costs more (7 > 4), we make it first: 1) Horizontal cut costs 7×1=7. 2) Vertical cut costs 4×2=8 (affects both horizontal strips). Total: 7+8=15. Wait, let's try vertical first: 1) Vertical cut costs 4×1=4. 2) Horizontal cut costs 7×2=14. Total: 4+14=18. So horizontal first gives 7+4=11.
example_3.py — Edge Case 1×3 Cake
$ Input: m = 1, n = 3, horizontalCut = [], verticalCut = [2, 3]
Output: 5
💡 Note: Only vertical cuts needed. Optimal order is expensive cuts first: 1) Cut with cost 3 first (3×1=3). 2) Cut with cost 2 next (2×1=2). Total: 3+2=5. Note: no horizontal cuts needed since m=1.

Constraints

  • 1 ≤ m, n ≤ 20
  • horizontalCut.length = m - 1
  • verticalCut.length = n - 1
  • 1 ≤ horizontalCut[i], verticalCut[j] ≤ 103
  • Each cut cost is paid every time that cut line is used

Visualization

Tap to expand
Original 4×3 CakeStep 1: Most expensive cut firstCost: 10After Cut 1 (Cost: 10×1=10)Cost: 8×2=16Final: 4 piecesKey Insight:Expensive cuts early → affects fewer piecesCheap cuts later → many pieces, but low costTotal Cost: 10 + 16 + ... = Minimum!
Understanding the Visualization
1
Identify all cuts
List every horizontal and vertical cut with their costs
2
Sort by expense
Arrange cuts from most expensive to least expensive
3
Cut greedily
Always make the most expensive remaining cut first
4
Track multipliers
Each cut's cost is multiplied by the number of existing pieces it affects
Key Takeaway
🎯 Key Insight: The greedy approach works because cut costs multiply by piece count - make expensive cuts when piece count is low!
Asked in
Google 35 Amazon 28 Microsoft 22 Meta 18
28.9K Views
Medium Frequency
~15 min Avg. Time
847 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen