OpenJ_Bailian - 2760 数字三角形 【动态规划】

题目链接:https://cn.vjudge.net/problem/OpenJ_Bailian-2760

思路:最容易想到的是基本的递推,但是会严重超时 ,正确方法看代码、

#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 105;
int a[MAXN][MAXN];
int MaxAns[MAXN][MAXN];
int GetMax(int x,int y)
{
	if(MaxAns[x][y] != -1)
		return MaxAns[x][y];

	if(x == MAXN)
		MaxAns[x][y] = a[x][y];
	else
		MaxAns[x][y] = max(GetMax(x+1,y),GetMax(x+1,y+1))+a[x][y];
	return MaxAns[x][y];
}

int main()
{

	int N;
	cin >> N;
	for(int i=1;i<=N;i++) 
		for(int j=1;j<=i;j++) {
			cin >> a[i][j];
			MaxAns[i][j] = -1;	
		}
/*	记忆化递归  
	cout << GetMax(1,1) << endl;
*/
// 递推
	for(int j=1;j<=N;j++)
		MaxAns[N][j] = a[N][j];

	for(int i=N-1;i>=1;i--)
		for(int j=1;i<=i;j++)
			MaxAns[i][j] = max(MaxAns[i+1][j],MaxAns[i+1][j+1]);
		
	cout  << MaxAns[1][1] << endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_42765557/article/details/84958807
今日推荐