C#
#include <stdio.h>
#define num 105
int arr[num][num] ={{75},
{95,64},
{17,47,82},
{18,35,87,10},
{20,4,82,47,65},
{19,1,23,75,3,34},
{88,2,77,73,7,63,67},
{99,65,4,28,6,16,70,92},
{41,41,26,56,83,40,80,70,33},
{41,48,72,33,47,32,37,16,94,29},
{53,71,44,65,25,43,91,52,97,51,14},
{70,11,33,28,77,73,17,78,39,68,17,57},
{91,71,52,38,17,14,91,43,58,50,27,29,48},
{63,66,4,68,89,53,67,30,73,16,69,87,40,31},
{4,62,98,27,23,9,70,98,73,93,38,53,60,4,23}};
int arr1[num][num] = {0};
//从上往下arr1={{75},{170,139},{187,217,221},....}
int main(){
arr1[0][0] = arr[0][0];
for (int i = 1; i <= 14; i++){
for(int j = 0; j <= i;j++){
if(j != 0 && arr1[i-1][j-1] > arr1[i-1][j])
arr1[i][j] = arr1[i-1][j-1];
if(j != i && arr1[i-1][j] > arr1[i-1][j-1])
arr1[i][j] = arr1[i-1][j];
arr1[i][j] += arr[i][j];
printf("%d\n",arr1[i][j]);
}
}
int max = 0;
for(int i = 0;i < 16;i++){
if(arr1[14][i] > max)
max = arr1[14][i];
}
printf("%d\n",max);
return 0;
}
JAVA
package exercise;
public class _最大路径和1 {
public static void main(String[] args) {
int arr[][] = {{75},
{95,64},
{17,47,82},
{18,35,87,10},
{20,4,82,47,65},
{19,1,23,75,3,34},
{88,2,77,73,7,63,67},
{99,65,4,28,6,16,70,92},
{41,41,26,56,83,40,80,70,33},
{41,48,72,33,47,32,37,16,94,29},
{53,71,44,65,25,43,91,52,97,51,14},
{70,11,33,28,77,73,17,78,39,68,17,57},
{91,71,52,38,17,14,91,43,58,50,27,29,48},
{63,66,4,68,89,53,67,30,73,16,69,87,40,31},
{4,62,98,27,23,9,70,98,73,93,38,53,60,4,23}};
int arr1[][] = new int[105][105];
//从下往上存放和
for(int i = 0;i < 15; i++) {
arr1[14][i] = arr[14][i];
}
for(int i = 13; i >=0; i--) {
for (int j = 0; j <= i; j++) {
arr1[i][j] = arr[i][j];
if(arr1[i+1][j] > arr1[i+1][j+1]) {
arr1[i][j]+=arr1[i+1][j];
} else {
arr1[i][j]+=arr1[i+1][j+1];
}
System.out.println(arr1[i][j]);
}
}
System.out.println(arr1[0][0]);
}
}
结果:1074