Maximum path sum in a triangle.
Last Updated :
12 Sep, 2023
We have given numbers in form of a 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
Method 1: 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.
Implementation of Recursive Approach:
C++
// C++ program for
// Recursive 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 i, int j, int row, int col){
if(j == col ){
return 0;
}
if(i == row-1 ){
return tri[i][j] ;
}
return tri[i][j] + max(maxPathSum(tri, i+1, j, row, col),
maxPathSum(tri, i+1, j+1, row, col)) ;
}
/* Driver program to test above functions */
int main()
{
int tri[N][N] = { {1, 0, 0},
{4, 8, 0},
{1, 5, 3} };
cout << maxPathSum(tri, 0, 0, 3, 3);
return 0;
}
Java
// Java program for
// Recursive implementation of
// Max sum problem in a triangle
import java.io.*;
class GFG {
static int N = 3;
// Function for finding maximum sum
public static int maxPathSum(int tri[][], int i, int j,
int row, int col)
{
if (j == col) {
return 0;
}
if (i == row - 1) {
return tri[i][j];
}
return tri[i][j]
+ Math.max(
maxPathSum(tri, i + 1, j, row, col),
maxPathSum(tri, i + 1, j + 1, row, col));
}
/* 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.print(maxPathSum(tri, 0, 0, 3, 3));
}
}
// This code is contributed by Rohit Pradhan
Python3
# Python program for
# Recursive implementation of
# Max sum problem in a triangle
N = 3
# Function for finding maximum sum
def maxPathSum(tri, i, j, row, col):
if(j == col ):
return 0
if(i == row-1 ):
return tri[i][j]
return tri[i][j] + max(maxPathSum(tri, i+1, j, row, col),
maxPathSum(tri, i+1, j+1, row, col))
# Driver program to test above functions
tri = [ [1, 0, 0],[4, 8, 0],[1, 5, 3] ]
print(maxPathSum(tri, 0, 0, 3, 3))
# This code is contributed by shinjanpatra
C#
// C# program for Recursive implementation
// of Max sum problem in a triangle
using System;
public class GFG
{
static int N = 3;
public static int max(int a, int b){
if(a > b) return a;
return b;
}
// Function for finding maximum sum
public static int maxPathSum(int[,] tri, int i, int j, int row, int col)
{
if (j == col) {
return 0;
}
if (i == row - 1) {
return tri[i,j];
}
return tri[i,j]
+ max(
maxPathSum(tri, i + 1, j, row, col),
maxPathSum(tri, i + 1, j + 1, row, col)
);
}
// Driver program to test above functions
public static void Main(string[] args)
{
int[,] tri = {{ 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
Console.WriteLine(maxPathSum(tri, 0, 0, 3, 3));
}
}
// This code is contributed by ajaymakavana.
JavaScript
<script>
// JavaScript program for
// Recursive implementation of
// Max sum problem in a triangle
const N = 3
// Function for finding maximum sum
function maxPathSum(tri, i, j, row, col){
if(j == col ){
return 0;
}
if(i == row-1 ){
return tri[i][j] ;
}
return tri[i][j] + Math.max(maxPathSum(tri, i+1, j, row, col),
maxPathSum(tri, i+1, j+1, row, col)) ;
}
/* Driver program to test above functions */
let tri = [ [1, 0, 0],[4, 8, 0],[1, 5, 3] ];
document.write(maxPathSum(tri, 0, 0, 3, 3));
// This code is contributed by shinjanpatra
</script>
Complexity Analysis:
- Time Complexity: O(2N*N)
- Auxiliary Space: O(N)
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 programming concept to find the maximum path sum.
Method 2: DP Top-Down
Since there are overlapping subproblems, we can avoid the repeated work done in method 1 by storing the min-cost path calculated so far using top-down approach
C++
// C++ program for Dynamic
// Programming implementation (Top-Down) 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 i, int j, int row, int col, vector<vector<int>> &dp){
if(j == col ){
return 0;
}
if(i == row-1 ){
return tri[i][j] ;
}
if(dp[i][j] != -1){
return dp[i][j] ;
}
return dp[i][j] = tri[i][j] + max(maxPathSum(tri, i+1, j, row, col, dp),
maxPathSum(tri, i+1, j+1, row, col, dp)) ;
}
/* Driver program to test above functions */
int main()
{
int tri[N][N] = { {1, 0, 0},
{4, 8, 0},
{1, 5, 3} };
vector<vector<int>> dp(N, vector<int>(N, -1) ) ;
cout << maxPathSum(tri, 0, 0, N, N, dp);
return 0;
}
Java
// Java program for Dynamic
// Programming implementation (Top-Down) of
// Max sum problem in a triangle
import java.io.*;
import java.util.*;
class GFG {
// Function for finding maximum sum
static int maxPathSum(int[][] tri, int i, int j,
int row, int col, int[][] dp)
{
if (j == col) {
return 0;
}
if (i == row - 1) {
return tri[i][j];
}
if (dp[i][j] != -1) {
return dp[i][j];
}
return dp[i][j]
= tri[i][j]
+ Math.max(
maxPathSum(tri, i + 1, j, row, col, dp),
maxPathSum(tri, i + 1, j + 1, row, col,
dp));
}
public static void main(String[] args)
{
int n = 3;
int[][] tri
= { { 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
int[][] dp = new int[n][n];
for (int[] row : dp) {
Arrays.fill(row, -1);
}
System.out.print(maxPathSum(tri, 0, 0, n, n, dp));
}
}
// This code is contributed by lokeshmvs21.
Python3
# C++ program for Dynamic
# Programming implementation (Top-Down) of
# Max sum problem in a triangle
N = 3
# Function for finding maximum sum
def maxPathSum(tri, i, j, row, col, dp):
if(j == col):
return 0
if(i == row-1):
return tri[i][j]
if(dp[i][j] != -1):
return -1
dp[i][j] = tri[i][j] + max(maxPathSum(tri, i+1, j, row, col, dp),
maxPathSum(tri, i+1, j+1, row, col, dp))
return dp[i][j]
# Driver program to test above functions
tri = [ [1, 0, 0],
[4, 8, 0],
[1, 5, 3] ]
dp = [[-1 for i in range(N)]for j in range(N)]
print(maxPathSum(tri, 0, 0, N, N, dp))
# This code is contributed by shinjanpatra
C#
// C# program for Dynamic
// Programming implementation (Top-Down) of
// Max sum problem in a triangle
using System;
class GFG
{
// Function for finding maximum sum
static int maxPathSum(int[, ] tri, int i, int j,
int row, int col, int[, ] dp)
{
if (j == col) {
return 0;
}
if (i == row - 1) {
return tri[i, j];
}
if (dp[i, j] != -1) {
return dp[i, j];
}
return dp[i, j]
= tri[i, j]
+ Math.Max(
maxPathSum(tri, i + 1, j, row, col, dp),
maxPathSum(tri, i + 1, j + 1, row, col,
dp));
}
static void Main()
{
int[, ] tri
= { { 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
int N = 3;
int[, ] dp = new int[N, N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
dp[i, j] = -1;
Console.Write(maxPathSum(tri, 0, 0, N, N, dp));
}
}
// This code is contributed by garg28harsh.
JavaScript
<script>
b// JavaScript program for Dynamic
// Programming implementation (Top-Down) of
// Max sum problem in a triangle
const N = 3
// Function for finding maximum sum
function maxPathSum(tri, i, j, row, col, dp){
if(j == col)
return 0
if(i == row-1)
return tri[i][j]
if(dp[i][j] != -1)
return -1
dp[i][j] = tri[i][j] + Math.max(maxPathSum(tri, i+1, j, row, col, dp),
maxPathSum(tri, i+1, j+1, row, col, dp))
return dp[i][j]
}
// Driver program to test above functions
let tri = [ [1, 0, 0],
[4, 8, 0],
[1, 5, 3] ]
let dp = new Array(N).fill(-1).map(()=>new Array(N).fill(-1))
document.write(maxPathSum(tri, 0, 0, N, N, dp),"</br>")
// This code is contributed by shinjanpatra
</script>
Complexity Analysis:
- Time Complexity: O(m*n) where m = no of rows and n = no of columns
- Auxiliary Space: O(n2)
Method 3: DP(Bottom - UP)
Since there are overlapping subproblems, we can avoid the repeated work done in method 1 by storing the min-cost path calculated so far using the bottom-up approach thus reducing stack space
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 n, vector<vector<int>> &dp)
{
// loop for bottom-up calculation
for(int j = 0; j < n; j++ ){
dp[n-1][j] = tri[n-1][j] ;
}
for(int i = n-2; i >= 0; i--){
for(int j = i; j >= 0; j-- ){
dp[i][j] = tri[i][j] + max(dp[i+1][j] , dp[i+1][j+1]) ;
}
}
return dp[0][0] ;
}
/* Driver program to test above functions */
int main()
{
int tri[N][N] = { {1, 0, 0},
{4, 8, 0},
{1, 5, 3} };
vector<vector<int>> dp(N, vector<int>(N, -1) ) ;
cout << maxPathSum(tri, N, dp);
return 0;
}
Java
// Java program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
public class Main
{
// Function for finding maximum sum
static int maxPathSum(int[][] tri, int n, int[][] dp)
{
// loop for bottom-up calculation
for (int j = 0; j < n; j++) {
dp[n - 1][j] = tri[n - 1][j];
}
for (int i = n - 2; i >= 0; i--) {
for (int j = i; j >= 0; j--) {
dp[i][j] = tri[i][j]
+ Math.max(dp[i + 1][j],
dp[i + 1][j + 1]);
}
}
return dp[0][0];
}
public static void main(String[] args)
{
int N = 3;
int[][] tri
= { { 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
int[][] dp = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
dp[i][j] = -1;
}
}
System.out.println(maxPathSum(tri, N, dp));
}
}
// This code is contributed by garg28harsh.
Python3
# Python program for Dynamic
# Programming implementation of
# Max sum problem in a triangle
# Number of rows in the triangle
N = 3
# Function for finding maximum sum
def maxPathSum(tri, n, dp):
# Loop for bottom-up calculation
for j in range(n):
dp[n-1][j] = tri[n-1][j]
for i in range(n-2, -1, -1):
for j in range(i, -1, -1):
dp[i][j] = tri[i][j] + max(dp[i+1][j], dp[i+1][j+1])
# Return the maximum sum
return dp[0][0]
# Driver program to test above functions
if __name__ == '__main__':
# Triangle of numbers
tri = [[1, 0, 0],
[4, 8, 0],
[1, 5, 3]]
# Initialize dp array with -1
dp = [[-1 for j in range(N)] for i in range(N)]
# Print the maximum sum
print(maxPathSum(tri, N, dp))
# This code is contributed by divyansh2212
C#
// C# program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
using System;
public class GFG {
// Function for finding maximum sum
static int maxPathSum(int[, ] tri, int n, int[, ] dp)
{
// loop for bottom-up calculation
for (int j = 0; j < n; j++) {
dp[n - 1, j] = tri[n - 1, j];
}
for (int i = n - 2; i >= 0; i--) {
for (int j = i; j >= 0; j--) {
dp[i, j] = tri[i, j]
+ Math.Max(dp[i + 1, j],
dp[i + 1, j + 1]);
}
}
return dp[0, 0];
}
public static void Main(string[] args)
{
int N = 3;
int[, ] tri = new int[, ] { { 1, 0, 0 },
{ 4, 8, 0 },
{ 1, 5, 3 } };
int[, ] dp = new int[N, N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
dp[i, j] = -1;
}
}
Console.WriteLine(maxPathSum(tri, N, dp));
}
}
// This code is contributed by karandeep1234
JavaScript
// Javascript program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
let N = 3
// Function for finding maximum sum
function maxPathSum(tri, n, dp)
{
// loop for bottom-up calculation
for(let j = 0; j < n; j++ ){
dp[n-1][j] = tri[n-1][j] ;
}
for(let i = n-2; i >= 0; i--){
for(let j = i; j >= 0; j-- ){
dp[i][j] = tri[i][j] + Math.max(dp[i+1][j] , dp[i+1][j+1]) ;
}
}
return dp[0][0] ;
}
/* Driver program to test above functions */
let tri = [ [1, 0, 0],
[4, 8, 0],
[1, 5, 3] ];
let dp = new Array(N);
for(let i = 0; i < N; i++)
dp[i] = new Array(N).fill(-1);
console.log(maxPathSum(tri, N, dp));
// This code is contributed by poojaagarwal2.
Complexity Analysis:
- Time Complexity: O(m*n) where m = no of rows and n = no of columns
- Auxiliary Space: O(n2)
Method 4: Space Optimization (Without Changning input matrix)
We do not need a 2d matrix we only need a 1d array that stores the minimum of the immediate next column and thus we can reduce space
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 n, vector<vector<int>> &dp)
{
vector<int> front(n, -1) , curr(n, -1) ;
for(int j = 0; j < n; j++ ){
front[j] = tri[n-1][j] ;
}
for(int i = n-2; i >= 0; i--){
for(int j = i; j >= 0; j-- ){
curr[j] = tri[i][j] + max(front[j] , front[j+1]) ;
}
front = curr ;
}
return front[0] ;
}
/* Driver program to test above functions */
int main()
{
int tri[N][N] = { {1, 0, 0},
{4, 8, 0},
{1, 5, 3} };
vector<vector<int>> dp(N, vector<int>(N, -1) ) ;
cout << maxPathSum(tri, N, dp);
return 0;
}
Java
// Java program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
public class GFG
{
// Function for finding maximum sum
static int maxPathSum(int[][] tri, int n, int[][] dp)
{
int front[] = new int[n];
int curr[] = new int[n];
for (int j = 0; j < n; j++) {
front[j] = tri[n - 1][j];
curr[j] = -1;
}
for (int i = n - 2; i >= 0; i--) {
for (int j = i; j >= 0; j--) {
curr[j]
= tri[i][j]
+ Math.max(front[j], front[j + 1]);
}
front = curr;
}
return front[0];
}
public static void main(String[] args)
{
int N = 3;
int[][] tri
= { { 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
int[][] dp = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
dp[i][j] = -1;
}
}
System.out.println(maxPathSum(tri, N, dp));
}
}
// This code is contributed by garg28harsh.
Python3
# Python program for Dynamic
# Programming implementation of
# Max sum problem in a triangle
N=3
# Function for finding maximum sum
def maxPathSum(tri,n,dp):
front=[-1]*n
curr=[-1]*n
for j in range(n):
front[j] = tri[n-1][j]
for i in range(n-2,-1,-1):
for j in range(i,-1,-1):
curr[j] = tri[i][j] + max(front[j] ,front[j+1])
front=curr
return front[0]
# Driver program to test above functions
tri=[[1, 0, 0],[4,8,0],[1,5,3]]
dp= [[-1 for i in range(N)] for j in range(N)]
print(maxPathSum(tri,N,dp))
# This code is contributed by Pushpesh Raj.
C#
// C# program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
using System;
public class GFG {
// Function for finding maximum sum
static int maxPathSum(int[, ] tri, int n, int[, ] dp)
{
int[] front = new int[n];
int[] curr = new int[n];
for (int j = 0; j < n; j++) {
front[j] = tri[n - 1, j];
curr[j] = -1;
}
for (int i = n - 2; i >= 0; i--) {
for (int j = i; j >= 0; j--) {
curr[j]
= tri[i, j]
+ Math.Max(front[j], front[j + 1]);
}
front = curr;
}
return front[0];
}
public static void Main(string[] args)
{
int N = 3;
int[, ] tri
= { { 1, 0, 0 }, { 4, 8, 0 }, { 1, 5, 3 } };
int[, ] dp = new int[N, N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
dp[i, j] = -1;
}
}
Console.WriteLine(maxPathSum(tri, N, dp));
}
}
// This code is contributed by karandeep1234
JavaScript
// Javascript program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
let N = 3
// Function for finding maximum sum
function maxPathSum(tri, n, dp)
{
let front= new Array(n).fill(-1);
let curr=new Array(n).fill(-1);
for(let j = 0; j < n; j++ ){
front[j] = tri[n-1][j] ;
}
for(let i = n-2; i >= 0; i--){
for(let j = i; j >= 0; j-- ){
curr[j] = tri[i][j] + Math.max(front[j] , front[j+1]) ;
}
front = curr ;
}
return front[0] ;
}
/* Driver program to test above functions */
let tri = [ [1, 0, 0],[4, 8, 0],[1, 5, 3]];
dp = new Array(N);
for(let i = 0; i < N; i++)
dp[i] = new Array(N).fill(-1);
console.log(maxPathSum(tri, N, dp));
// This code is contributed by ritaagarwal.
Complexity Analysis:
- Time Complexity: O(m*n) where m = no of rows and n = no of columns
- Auxiliary Space: O(n)
Method 5: Space Optimization (Changing input matrix)
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
?>
JavaScript
<script>
// Javascript Program for Dynamic
// Programming implementation of
// Max sum problem in a triangle
let N = 3;
// Function for finding maximum sum
function maxPathSum(tri, m, n)
{
// loop for bottom-up calculation
for (let i = m - 1; i >= 0; i--)
{
for (let 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
let tri = [[1, 0, 0],
[4, 8, 0],
[1, 5, 3]];
document.write( maxPathSum(tri, 2, 2));
// This code is contributed by susmitakundugoaldanga.
</script>
Complexity Analysis:
- Time Complexity: O(m*n) where m = no of rows and n = no of columns
- Auxiliary Space: O(1)
Similar Reads
Maximum Path sum in a N-ary Tree Given an undirected tree with n nodes numbered from 1 to n and an array arr[] where arr[i] denotes the value assigned to (i+1)th node. The connections between the nodes are provided in a 2-dimensional array edges[][]. The task is to find the maximum path sum between any two nodes. (Both the nodes ca
7 min read
Maximum path sum in an Inverted triangle | SET 2 Given numbers in form of an Inverted triangle. By starting at the bottom of the triangle and moving to adjacent numbers on the row above, find the maximum total from bottom to top.Examples: Input : 1 5 3 4 8 1 Output : 14 Input : 8 5 9 3 2 4 6 7 4 3 Output : 23 Method 1: Recursion In the previous ar
13 min read
Maximum sum of a path in a Right Number Triangle Given a right triangle of numbers, find the largest of the sum of numbers that appear on the paths starting from the top towards the base, so that on each path the next number is located directly below or below and one place to the right. Examples :Â Input : 1 1 2 4 1 2 2 3 1 1 Output : 9 Explanatio
15+ min read
Maximum triplet sum in array Given an array, the task is to find the maximum triplet sum in the array.Examples : Input : arr[] = {1, 2, 3, 0, -1, 8, 10} Output : 21 10 + 8 + 3 = 21 Input : arr[] = {9, 8, 20, 3, 4, -1, 0} Output : 37 20 + 9 + 8 = 37 Recommended PracticeMaximum triplet sum in arrayTry It! Naive approach: In this
12 min read
Maximum Perimeter Triangle from array Given an array arr[] of positive integers. Find out the maximum perimeter of the triangle from the array.Note: Return -1, if it is not possible to construct a triangle.Examples:Input: arr[] = [6, 1, 6, 5, 8, 4]Output: 20Explanation: Triangle formed by 8,6 & 6 has perimeter 20, which is the max p
8 min read
Find Maximum Sum of Mountain Triplets Given an array A[] of integers. Then the task is to output the maximum sum of a triplet (Ai, Aj, Ak) such that it must follow the conditions: (i < j < k) and (Ai < Aj > Ak). If no such triplet exists, then output -1. Examples: Input: A[] = {1, 5, 4, 7, 3} Output: 15 Explanation: There ar
13 min read
Minimum length of the shortest path of a triangle Given N points on the plane, ( X1, Y1 ), ( X2, Y2 ), ( X3, Y3 ), ......, ( XN, YN ). The task is to calculate the minimum length of the shorter side of the triangle. and the path or points to place an isosceles triangle with any two sides of the triangle on the coordinate axis ( X axis and Y axis )
7 min read
Maximum equal sum of three stacks The three stacks s1, s2 and s3, each containing positive integers, are given. The task is to find the maximum possible equal sum that can be achieved by removing elements from the top of the stacks. Elements can be removed from the top of each stack, but the final sum of the remaining elements in al
11 min read
Program to print Sum Triangle for a given array Given a array, write a program to construct a triangle where last row contains elements of given array, every element of second last row contains sum of below two elements and so on. Example: Input: arr[] = {4, 7, 3, 6, 7};Output:8140 4121 19 2211 10 9 134 7 3 6 7 Input: {10, 40, 50}Output:14050 901
9 min read
Find the maximum sum of Plus shape pattern in a 2-D array Given a 2-D array of size N*M where, 3\leq N, M \leq 1000 . The task is to find the maximum value achievable by a + shaped pattern. The elements of the array can be negative.The plus(+) shape pattern is formed by taking any element with co-ordinate (x, y) as a center and then expanding it in all fou
10 min read