数字三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
-
在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走。只需要求出这个最大和即可,不必给出具体路径。
-
三角形行数大于1小于等于100,数字为0-99
-
直接递归的话时间复杂度太大,这里面有很多重复计算的点,所以创建一个和三角形一样大的二维数组,每当计算过这个点时就把值赋给这个数组。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX 101
int D[MAX][MAX];//存放三角形的数组
int n;
int maxSum[MAX][MAX]; //dp数组,用来记录已经算过的数
int MaxSum(int i, int j) {
if (maxSum[i][j] != -1) //如果maxSum中的值被修改过,意味着这个点已经被计算过,直接返回值就行了
return maxSum[i][j];