Maximum path sum in a triangle.
We have given numbers in form of triangle, by starting at the top of the triangle and moving to adjacent numbers on the row below, find the maximum total from top to bottom.
Examples :
Input : 3 7 4 2 4 6 8 5 9 3 Output : 23 Explanation : 3 + 7 + 4 + 9 = 23 Input : 8 -4 4 2 2 6 1 1 1 1 Output : 19 Explanation : 8 + 4 + 6 + 1 = 19
We can go through the brute force by checking every possible path but that is much time taking so we should try to solve this problem with the help of dynamic programming which reduces the time complexity.
If we should left shift every element and put 0 at each empty position to make it a regular matrix, then our problem looks like minimum cost path.
So, after converting our input triangle elements into a regular matrix we should apply the dynamic programmic concept to find the maximum path sum.
Applying, DP in bottom-up manner we should solve our problem as:
Example:
3 7 4 2 4 6 8 5 9 3 Step 1 : 3 0 0 0 7 4 0 0 2 4 6 0 8 5 9 3 Step 2 : 3 0 0 0 7 4 0 0 10 13 15 0 Step 3 : 3 0 0 0 20 19 0 0 Step 4: 23 0 0 0 output : 23
C++
// C++ program for Dynamic // Programming implementation of // Max sum problem in a triangle #include<bits/stdc++.h> using namespace std; #define N 3 // Function for finding maximum sum int maxPathSum( int tri[][N], int m, int n) { // loop for bottom-up calculation for ( int i=m-1; i>=0; i--) { for ( int j=0; j<=i; j++) { // for each element, check both // elements just below the number // and below right to the number // add the maximum of them to it if (tri[i+1][j] > tri[i+1][j+1]) tri[i][j] += tri[i+1][j]; else tri[i][j] += tri[i+1][j+1]; } } // return the top element // which stores the maximum sum return tri[0][0]; } /* Driver program to test above functions */ int main() { int tri[N][N] = { {1, 0, 0}, {4, 8, 0}, {1, 5, 3} }; cout << maxPathSum(tri, 2, 2); return 0; } |
Java
// Java Program for Dynamic // Programming implementation of // Max sum problem in a triangle import java.io.*; class GFG { static int N = 3 ; // Function for finding maximum sum static int maxPathSum( int tri[][], int m, int n) { // loop for bottom-up calculation for ( int i = m - 1 ; i >= 0 ; i--) { for ( int j = 0 ; j <= i; j++) { // for each element, check both // elements just below the number // and below right to the number // add the maximum of them to it if (tri[i + 1 ][j] > tri[i + 1 ][j + 1 ]) tri[i][j] += tri[i + 1 ][j]; else tri[i][j] += tri[i + 1 ][j + 1 ]; } } // return the top element // which stores the maximum sum return tri[ 0 ][ 0 ]; } /* Driver program to test above functions */ public static void main (String[] args) { int tri[][] = { { 1 , 0 , 0 }, { 4 , 8 , 0 }, { 1 , 5 , 3 } }; System.out.println ( maxPathSum(tri, 2 , 2 )); } } // This code is contributed by vt_m |
Python3
# Python program for # Dynamic Programming # implementation of Max # sum problem in a # triangle N = 3 # Function for finding maximum sum def maxPathSum(tri, m, n): # loop for bottom-up calculation for i in range (m - 1 , - 1 , - 1 ): for j in range (i + 1 ): # for each element, check both # elements just below the number # and below right to the number # add the maximum of them to it if (tri[i + 1 ][j] > tri[i + 1 ][j + 1 ]): tri[i][j] + = tri[i + 1 ][j] else : tri[i][j] + = tri[i + 1 ][j + 1 ] # return the top element # which stores the maximum sum return tri[ 0 ][ 0 ] # Driver program to test above function tri = [[ 1 , 0 , 0 ], [ 4 , 8 , 0 ], [ 1 , 5 , 3 ]] print (maxPathSum(tri, 2 , 2 )) # This code is contributed # by Soumen Ghosh. |
C#
// C# Program for Dynamic Programming // implementation of Max sum problem // in a triangle using System; class GFG { // Function for finding maximum sum static int maxPathSum( int [,]tri, int m, int n) { // loop for bottom-up calculation for ( int i = m - 1; i >= 0; i--) { for ( int j = 0; j <= i; j++) { // for each element, // check both elements // just below the number // and below right to // the number add the // maximum of them to it if (tri[i + 1,j] > tri[i + 1,j + 1]) tri[i,j] += tri[i + 1,j]; else tri[i,j] += tri[i + 1,j + 1]; } } // return the top element // which stores the maximum sum return tri[0,0]; } /* Driver program to test above functions */ public static void Main () { int [,]tri = { {1, 0, 0}, {4, 8, 0}, {1, 5, 3} }; Console.Write ( maxPathSum(tri, 2, 2)); } } // This code is contributed by nitin mittal. |
PHP
<?php // PHP program for Dynamic // Programming implementation of // Max sum problem in a triangle // Function for finding // maximum sum function maxPathSum( $tri , $m , $n ) { // loop for bottom-up // calculation for ( $i = $m - 1; $i >= 0; $i --) { for ( $j = 0; $j <= $i ; $j ++) { // for each element, check // both elements just below // the number and below right // to the number add the maximum // of them to it if ( $tri [ $i + 1][ $j ] > $tri [ $i + 1] [ $j + 1]) $tri [ $i ][ $j ] += $tri [ $i + 1][ $j ]; else $tri [ $i ][ $j ] += $tri [ $i + 1] [ $j + 1]; } } // return the top element // which stores the maximum sum return $tri [0][0]; } // Driver Code $tri = array ( array (1, 0, 0), array (4, 8, 0), array (1, 5, 3)); echo maxPathSum( $tri , 2, 2); // This code is contributed by ajit ?> |
Output :
14
This article is contributed by Shivam Pradhan (anuj_charm). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Recommended Posts:
- Maximum sum of a path in a Right Number Triangle
- Maximum path sum in an Inverted triangle | SET 2
- Minimum Sum Path in a Triangle
- Minimum length of the shortest path of a triangle
- Path with maximum average value
- Maximum sum path in a matrix from top to bottom
- Maximum decimal value path in a binary matrix
- Maximum Perimeter Triangle from array
- Maximum path sum for each position with jumps under divisibility condition
- Maximum weight path ending at any element of last row in a matrix
- Maximum height when coins are arranged in a triangle
- Maximum area of triangle having different vertex colors
- Maximum number of squares that can fit in a right angle isosceles triangle
- Maximum number of 2x2 squares that can be fit inside a right isosceles triangle
- Maximum path sum that starting with any cell of 0-th row and ending with any cell of (N-1)-th row