数字三角形的记忆递归型动归程序
POJ(1163)
/*
数字三角形的记忆递归型动归程序
注意:
不能使用直接递归,原因,时间复杂度为二的n次方,超时
*/
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 101
int D[MAX][MAX];//输入数组
int n;
int maxSum[MAX][MAX];//标记数组,默认赋值为-1
int MaxSum(int i,int j){
if(maxSum[i][j]!=-1)
return maxSum[i][j];//程序正常出口
if(i == n)//只有一层
maxSum[i][j]=D[i][j];
else{
int x=MaxSum(i + 1,j);//左下方的值
int y=MaxSum(i+1, j+1);//右下方的值
maxSum[i][j]=max(x,y)+D[i][j];//
}
}
int main(){
int i,j;
cin >> n;
for(i = 1;i<=n;i++)
for(j=1;j<=i;j++){
cin >> D[i][j];
maxSum[i][j] = -1;
}
cout << MaxSum(1,1) <<endl;
}