在做此题时,首先运用了跟1745矩阵最大路径一样的作法,自顶而下,状态转移方程:a[i[[j]+=max(a[i-1][j],a[i-1][j-1]),但是WA了。必须改成自底而上的方式才能AC掉。在网上找类似的题,发现Leetcode:三角形阵列最小和 一题,可以使用自顶而下。为什么POJ是这样还没有搞明白,思考了很久不觉得两者有什么除了顺序上的区别。望高手告知!
附上代码:
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 101
int a[maxn][maxn];
int main()
{
int n;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>a[i][j];
}
}
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
a[i][j]+=a[i+1][j]>a[i+1][j+1]?a[i+1][j]:a[i+1][j+1];
}
}
cout<<a[1][1]<<endl;
}
}