Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Problem C. Minimum Path in Triangle | Solutions
Dynamic Programming
course content

Course Content

Dynamic Programming

Dynamic Programming

1. Intro to Dynamic Programming
2. Problems
3. Solutions

Problem C. Minimum Path in Triangle

The key to the solution is forming all possible minimum-cost paths from top to bottom row. You can not be sure which one will have minimum cost, so let's traverse a triangle and update values in the cells:

  • triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]: thats how you can reach cell [i, j]` with min cost
  • triangle[i][0] += triangle[i-1][0], triangle[i][i-1] += triangle[i-1][i-1] : extreme cases (number of columns in each row is equal to number of row).

After updating, choose the minimum path cost, which is in the last row.

1234567891011121314151617181920
def minPath(triangle): for i in range(1, len(triangle)): for j in range(i+1): small = 10000000 if j > 0: small = triangle[i-1][j-1] if j < i: small = min(small, triangle[i-1][j]) triangle[i][j] += small return min(triangle[-1]) triangle = [[90], [72, 6], [3, 61, 51], [90, 70, 23, 100], [79, 92, 72, 14, 1], [7, 97, 29, 100, 93, 93], [52, 95, 21, 36, 69, 69, 14], [33, 82, 20, 37, 79, 83, 21, 45]] print(minPath(triangle))
copy

Switch to desktop for real-world practiceContinue from where you are using one of the options below

Everything was clear?

Section 3. Chapter 3
toggle bottom row

Problem C. Minimum Path in Triangle

The key to the solution is forming all possible minimum-cost paths from top to bottom row. You can not be sure which one will have minimum cost, so let's traverse a triangle and update values in the cells:

  • triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]: thats how you can reach cell [i, j]` with min cost
  • triangle[i][0] += triangle[i-1][0], triangle[i][i-1] += triangle[i-1][i-1] : extreme cases (number of columns in each row is equal to number of row).

After updating, choose the minimum path cost, which is in the last row.

1234567891011121314151617181920
def minPath(triangle): for i in range(1, len(triangle)): for j in range(i+1): small = 10000000 if j > 0: small = triangle[i-1][j-1] if j < i: small = min(small, triangle[i-1][j]) triangle[i][j] += small return min(triangle[-1]) triangle = [[90], [72, 6], [3, 61, 51], [90, 70, 23, 100], [79, 92, 72, 14, 1], [7, 97, 29, 100, 93, 93], [52, 95, 21, 36, 69, 69, 14], [33, 82, 20, 37, 79, 83, 21, 45]] print(minPath(triangle))
copy

Switch to desktop for real-world practiceContinue from where you are using one of the options below

Everything was clear?

Section 3. Chapter 3
toggle bottom row

Problem C. Minimum Path in Triangle

The key to the solution is forming all possible minimum-cost paths from top to bottom row. You can not be sure which one will have minimum cost, so let's traverse a triangle and update values in the cells:

  • triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]: thats how you can reach cell [i, j]` with min cost
  • triangle[i][0] += triangle[i-1][0], triangle[i][i-1] += triangle[i-1][i-1] : extreme cases (number of columns in each row is equal to number of row).

After updating, choose the minimum path cost, which is in the last row.

1234567891011121314151617181920
def minPath(triangle): for i in range(1, len(triangle)): for j in range(i+1): small = 10000000 if j > 0: small = triangle[i-1][j-1] if j < i: small = min(small, triangle[i-1][j]) triangle[i][j] += small return min(triangle[-1]) triangle = [[90], [72, 6], [3, 61, 51], [90, 70, 23, 100], [79, 92, 72, 14, 1], [7, 97, 29, 100, 93, 93], [52, 95, 21, 36, 69, 69, 14], [33, 82, 20, 37, 79, 83, 21, 45]] print(minPath(triangle))
copy

Switch to desktop for real-world practiceContinue from where you are using one of the options below

Everything was clear?

The key to the solution is forming all possible minimum-cost paths from top to bottom row. You can not be sure which one will have minimum cost, so let's traverse a triangle and update values in the cells:

  • triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]: thats how you can reach cell [i, j]` with min cost
  • triangle[i][0] += triangle[i-1][0], triangle[i][i-1] += triangle[i-1][i-1] : extreme cases (number of columns in each row is equal to number of row).

After updating, choose the minimum path cost, which is in the last row.

1234567891011121314151617181920
def minPath(triangle): for i in range(1, len(triangle)): for j in range(i+1): small = 10000000 if j > 0: small = triangle[i-1][j-1] if j < i: small = min(small, triangle[i-1][j]) triangle[i][j] += small return min(triangle[-1]) triangle = [[90], [72, 6], [3, 61, 51], [90, 70, 23, 100], [79, 92, 72, 14, 1], [7, 97, 29, 100, 93, 93], [52, 95, 21, 36, 69, 69, 14], [33, 82, 20, 37, 79, 83, 21, 45]] print(minPath(triangle))
copy

Switch to desktop for real-world practiceContinue from where you are using one of the options below
Section 3. Chapter 3
Switch to desktop for real-world practiceContinue from where you are using one of the options below
We're sorry to hear that something went wrong. What happened?
some-alt