📖 Scenario: Imagine you are helping a robot find how many different ways it can move from the top-left corner to the bottom-right corner of a grid. The robot can only move right or down.
🎯 Goal: Build a program that calculates the number of unique paths in a grid using dynamic programming.
📋 What You'll Learn
Create a 2D vector called dp to store the number of ways to reach each cell
Use a nested for loop to fill the dp table
Initialize the first row and first column of dp with 1
Calculate the number of unique paths to each cell as the sum of paths from the top and left cells
Print the number of unique paths to the bottom-right cell
💡 Why This Matters
🌍 Real World
Robots and automated systems often need to find paths in grids or maps. This technique helps calculate how many ways a robot can reach a destination.
💼 Career
Understanding dynamic programming and grid traversal is important for software engineers working on robotics, game development, and pathfinding algorithms.
Progress0 / 4 steps
1
Create the grid size variables
Create two integer variables called m and n and set them to 3 and 3 respectively to represent the grid size.
DSA C++
Hint
Use int m = 3; and int n = 3; to set the grid size.
2
Initialize the DP table
Create a 2D vector of integers called dp with m rows and n columns, and initialize all values to 0.
DSA C++
Hint
Use std::vector> dp(m, std::vector(n, 0)); to create the 2D vector.
3
Fill the DP table with unique path counts
Use nested for loops with variables i and j to fill the dp table. Set dp[i][0] and dp[0][j] to 1. For other cells, set dp[i][j] to dp[i-1][j] + dp[i][j-1].
DSA C++
Hint
Use two nested loops and fill the first row and column with 1. Then fill other cells by adding top and left values.
4
Print the number of unique paths
Print the value of dp[m-1][n-1] which represents the number of unique paths to the bottom-right corner.
DSA C++
Hint
Use std::cout << dp[m-1][n-1] << std::endl; to print the result.
Practice
(1/5)
1. What does the problem "Unique Paths in Grid DP" ask you to find? Given a grid of size m x n, how many unique paths exist from the top-left corner to the bottom-right corner if you can only move right or down?
easy
A. The number of different ways to reach the bottom-right corner moving only right or down
B. The shortest path length from top-left to bottom-right
C. The maximum sum path from top-left to bottom-right
D. The number of obstacles in the grid
Solution
Step 1: Understand the problem statement
The problem asks for counting all possible unique paths from the top-left to bottom-right corner of a grid, moving only right or down.
Step 2: Clarify what is being counted
We count the number of ways to reach the destination, not the shortest path or sums.
Final Answer:
The number of different ways to reach the bottom-right corner moving only right or down -> Option A
Quick Check:
Unique paths count = number of ways [OK]
Hint: Count paths moving only right or down [OK]
Common Mistakes:
Confusing path count with shortest path length
Thinking about obstacles when none are given
Mixing sum of values with path count
2. Which of the following is the correct way to initialize a 2D vector dp of size m x n with all values 0 in C++?
Hint: Use DP formula dp[i][j] = dp[i-1][j] + dp[i][j-1] [OK]
Common Mistakes:
Not initializing first row and column to 1
Using wrong indices in dp update
Confusing addition with multiplication
4. Identify the error in the following code snippet for calculating unique paths in a grid:
int uniquePaths(int m, int n) {
std::vector dp(m, std::vector<int>(n));
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] * dp[i][j-1];
}
}
return dp[m-1][n-1];
}
medium
A. The multiplication operator should be addition in dp update
B. The dp vector is not initialized with zeros
C. The loops should start from 0 instead of 1
D. The return statement should be dp[0][0]
Solution
Step 1: Check dp update formula
The code uses multiplication: dp[i][j] = dp[i-1][j] * dp[i][j-1], which is incorrect for counting paths.
Step 2: Correct formula for unique paths
The correct formula adds the number of ways from top and left cells: dp[i][j] = dp[i-1][j] + dp[i][j-1].
Final Answer:
The multiplication operator should be addition in dp update -> Option A
Quick Check:
Use addition, not multiplication for path counts [OK]
Hint: Sum paths from top and left cells, don't multiply [OK]
Common Mistakes:
Using multiplication instead of addition in dp formula
Returning wrong dp cell
Not initializing first row or column
5. Given a grid with obstacles represented by 1s and empty spaces by 0s, how would you modify the unique paths DP solution to count paths avoiding obstacles? Consider the grid:
0 0 0
0 1 0
0 0 0
hard
A. Set dp[i][j] = 1 for all cells regardless of obstacles
B. Set dp[i][j] = 0 if grid[i][j] is 1, else dp[i][j] = dp[i-1][j] + dp[i][j-1]
C. Multiply dp[i-1][j] and dp[i][j-1] if obstacle is present
D. Ignore obstacles and use normal dp formula
Solution
Step 1: Handle obstacles in dp initialization
If a cell has an obstacle (value 1), set dp[i][j] = 0 because no path can go through it.
Step 2: Update dp values considering obstacles
For other cells, dp[i][j] = dp[i-1][j] + dp[i][j-1], summing paths from top and left only if those cells are reachable.
Final Answer:
Set dp[i][j] = 0 if grid[i][j] is 1, else dp[i][j] = dp[i-1][j] + dp[i][j-1] -> Option B
Quick Check:
Obstacles block paths, set dp to 0 there [OK]
Hint: Zero dp for obstacles, sum paths otherwise [OK]
Common Mistakes:
Ignoring obstacles in dp calculation
Using multiplication instead of addition
Setting dp to 1 for obstacle cells
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.