C++ 中以任意第 0 行单元格为起点,以任意第 (N-1) 行单元格为终点的最大路径和


在本教程中,我们将探讨一个程序,以查找以第 0 行的任意单元格为起点,以第 (N-1) 行的任意单元格为终点的最大路径和

为此,我们将提供一个矩阵,其可能的移动方式为 (i+1, j)、(i+1, j-1)、(i+1, j+1)。我们的任务是从第 0 个位置开始,移动到最后一行,找出最大和路径。

示例

 实时演示

#include<bits/stdc++.h>
using namespace std;
#define N 4
//finding maximum sum path
int MaximumPath(int Mat[][N]) {
   int result = 0 ;
   int dp[N][N+2];
   memset(dp, 0, sizeof(dp));
   for (int i = 0 ; i < N ; i++)
      dp[0][i+1] = Mat[0][i];
   for (int i = 1 ; i < N ; i++)
      for (int j = 1 ; j <= N ; j++)
         dp[i][j] = max(dp[i-1][j-1], max(dp[i-1][j], dp[i-1][j+1])) + Mat[i][j-1] ;
   for (int i=0; i<=N; i++)
      result = max(result, dp[N-1][i]);
   return result ;
}
int main() {
   int Mat[4][4] = {
      { 4, 2 , 3 , 4 },
      { 2 , 9 , 1 , 10},
      { 15, 1 , 3 , 0 },
      { 16 ,92, 41, 44 }
   };
   cout << MaximumPath ( Mat ) <<endl ;
   return 0;
}

输出

120

更新于:09-Sep-2020

149 浏览

开启你的职业生涯

完成课程获得认证

立即开始
广告