题目链接:https://www.lanqiao.cn/problems/505/learning/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Max(int a, int b) {
return a > b ? a : b;
}
int record[128][128];
int Func(int matrix[][128], int row, int columns, int i, int j, int left_step, int right_step) {
if (record[i][j] != 0) {
return record[i][j];
}
if (i == row - 1) {
if (abs(left_step - right_step) > 1) {
return -100000;
}
return matrix[i][j];
}
int left = Func(matrix, row, columns, i + 1, j, left_step + 1, right_step);
int right = Func(matrix, row, columns, i + 1, j + 1, left_step, right_step + 1);
record[i][j] = Max(left, right) + matrix[i][j];
return Max(left, right) + matrix[i][j];
}
int main() {
int matrix[128][128];
int i;
for (i = 0; i < 128; i++) {
memset(matrix[i], 0, sizeof(matrix[i]));
memset(record[i], 0, sizeof(record[i]));
}
int N;
scanf("%d", &N);
int j;
for (i = 0; i < N; i++) {
for (j = 0; j < i + 1; j++) {
scanf("%d", &matrix[i][j]);
}
}
printf("%d", Func(matrix, N, N, 0, 0, 0, 0));
return 0;
}