POJ1163 The Triangle 题解

题目链接:http://poj.org/problem?id=1163

思路:典型的动态规划,转换公式为

maxSum[i][j] = max(maxSum[i+1][j],maxSum[i+1][j+1]) + D[i][j]

不过这里可以进行一个优化,把maxSum数组存到原来的D数组的最后一行,每次只要更新数组的最后一行即可,这样就节省了空间。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 150
int map[MAXN][MAXN];
int main()
{
	int *maxsum;
	int n;
	cin >> n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
			cin>>map[i][j];
	maxsum=map[n];
	for(int i=n-1;i>=1;--i)
		for(int j=1;j<=i;j++)
			maxsum[j]=max(maxsum[j],maxsum[j+1])+map[i][j];
	cout<<maxsum[1]<<endl;
}

你可能感兴趣的:(POJ1163 The Triangle 题解)