📖 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 integer array called dp to store the number of ways to reach each cell
Use two integer variables m and n for grid dimensions
Fill the dp array using dynamic programming rules
Print the number of unique paths from top-left to bottom-right
💡 Why This Matters
🌍 Real World
Robots and automated systems often need to find paths in grids or maps. This technique helps calculate possible routes efficiently.
💼 Career
Dynamic programming is a key skill in software engineering interviews and real-world problem solving, especially in pathfinding and optimization tasks.
Progress0 / 4 steps
1
Create grid size variables
Create two integer variables called m and n and set m = 3 and n = 3 to represent a 3 by 3 grid.
DSA C#
Hint
Use int m = 3; and int n = 3; to set the grid size.
2
Create the DP array
Create a 2D integer array called dp with size m by n to store the number of unique paths to each cell.
DSA C#
Hint
Use int[,] dp = new int[m, n]; to create the 2D array.
3
Fill the DP array with unique paths counts
Use nested for loops with variables i and j to fill the dp array. Set dp[i, 0] = 1 for all rows and dp[0, j] = 1 for all columns. For other cells, set dp[i, j] = dp[i-1, j] + dp[i, j-1].
DSA C#
Hint
Initialize first row and column with 1, then fill others by adding top and left cells.
4
Print the number of unique paths
Print the value of dp[m - 1, n - 1] which is the number of unique paths from top-left to bottom-right.
DSA C#
Hint
Use Console.WriteLine(dp[m - 1, n - 1]); to print the result.
Practice
(1/5)
1. What does the problem "Unique Paths in Grid DP" typically ask you to find?
easy
A. The maximum sum path from the top-left to the bottom-right corner of a grid.
B. The shortest path length from the top-left to the bottom-right corner of a grid.
C. The number of different ways to move from the top-left to the bottom-right corner of a grid using only right and down moves.
D. The number of obstacles in the grid.
Solution
Step 1: Understand the problem goal
The problem asks for counting all possible paths from the top-left to bottom-right corner moving only right or down.
Step 2: Differentiate from other path problems
It is not about shortest path or sums, but counting unique ways to reach the destination.
Final Answer:
The number of different ways to move from the top-left to the bottom-right corner of a grid using only right and down moves. -> Option C
Quick Check:
Unique paths count = number of ways [OK]
Hint: Count paths by moving only right or down [OK]
Common Mistakes:
Confusing unique paths with shortest path length
Including diagonal moves
Counting obstacles instead of paths
2. Which of the following C# code snippets correctly initializes a 2D array for dynamic programming of size m x n?
easy
A. int[,] dp = new int[m, n];
B. int[][] dp = new int[m][n];
C. int[][] dp = new int[m, n];
D. int[,] dp = new int[m][];
Solution
Step 1: Recall C# 2D array syntax
In C#, a rectangular 2D array is declared as int[,] dp = new int[m, n];
Step 2: Identify incorrect syntax
Options B, C, and D misuse jagged array or rectangular array syntax.
Final Answer:
int[,] dp = new int[m, n]; -> Option A
Quick Check:
Rectangular 2D array uses [,] syntax [OK]
Hint: Use int[,] for 2D arrays, not jagged syntax [OK]
Common Mistakes:
Using jagged array syntax incorrectly
Mixing rectangular and jagged array declarations
Missing array size initialization
3. What is the output of the following C# code snippet for Unique Paths in a 3x3 grid?
int m = 3, n = 3;
int[,] dp = new int[m, 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];
}
}
Console.WriteLine(dp[m - 1, n - 1]);
medium
A. 10
B. 3
C. 9
D. 6
Solution
Step 1: Initialize first row and column
First row and column are set to 1, representing only one path along edges.
Step 2: Calculate dp values for inner cells
Each cell dp[i,j] = dp[i-1,j] + dp[i,j-1]. For 3x3 grid, dp[2,2] = 6.
Final Answer:
6 -> Option D
Quick Check:
Unique paths in 3x3 grid = 6 [OK]
Hint: Use dp[i,j] = dp[i-1,j] + dp[i,j-1] to fill grid [OK]
Common Mistakes:
Not initializing first row and column to 1
Adding instead of summing paths
Off-by-one errors in loops
4. Identify the error in the following C# code snippet for Unique Paths calculation:
int m = 3, n = 3;
int[,] dp = new int[m, 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];
}
}
Console.WriteLine(dp[m - 1, n - 1]);
medium
A. The dp array is not initialized.
B. The loops use <= causing index out of range exception.
C. The dp formula is incorrect; it should subtract values.
D. The Console.WriteLine statement is missing a semicolon.
Solution
Step 1: Check loop boundaries
Loops use i <= m and j <= n which exceed array bounds (max index m-1, n-1).
Step 2: Identify runtime error
This causes IndexOutOfRangeException at runtime when accessing dp[m,0] or dp[0,n].
Final Answer:
The loops use <= causing index out of range exception. -> Option B
Quick Check:
Loop bounds must be less than array size [OK]
Hint: Use < not <= for array indices to avoid out of range [OK]
Common Mistakes:
Using <= instead of < in loops
Ignoring array index limits
Misunderstanding zero-based indexing
5. Given a 4x5 grid with some obstacles represented by 1s, how would you modify the Unique Paths DP solution to count paths avoiding obstacles?
A. Initialize dp[i,j] = 0 if obstacleGrid[i,j] == 1; else dp[i,j] = dp[i-1,j] + dp[i,j-1] (with boundary checks). Initialize first row and column carefully considering obstacles.
B. Ignore obstacles and calculate dp as usual because obstacles don't affect path count.
C. Set dp[i,j] = 1 for all cells and subtract 1 for obstacles at the end.
D. Use recursion without memoization to handle obstacles.
Solution
Step 1: Set dp to 0 where obstacles exist
For cells with obstacleGrid[i,j] == 1, dp[i,j] must be 0 to block paths.
Step 2: Calculate dp with obstacle checks
For other cells, dp[i,j] = dp[i-1,j] + dp[i,j-1], ensuring no paths through obstacles. Initialize first row and column carefully to stop paths after obstacles.
Final Answer:
Initialize dp[i,j] = 0 if obstacleGrid[i,j] == 1; else dp[i,j] = dp[i-1,j] + dp[i,j-1] (with boundary checks). Initialize first row and column carefully considering obstacles. -> Option A
Quick Check:
Obstacles block paths, set dp=0 there [OK]
Hint: Set dp=0 on obstacles, sum neighbors otherwise [OK]
Common Mistakes:
Ignoring obstacles in dp calculation
Not initializing first row/column correctly with obstacles
Using recursion without memoization causing inefficiency
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.