例题一、数字三角形(POJ1163)
7 | ||||
3 | 8 | |||
8 | 1 | 0 | ||
2 | 7 | 4 | 4 | |
4 | 5 | 2 | 6 | 5 |
为什么超时?
回答:重复计算
7 | ||||
3 | 8 | |||
8 | 1 | 0 | ||
2 | 7 | 4 | 4 | |
4 | 5 | 2 | 6 | 5 |
代码如下:
#include <iostream>
#include<algorithm>
using namespace std;
#define MAX 101
int D[MAX][MAX];
int n;
int maxSum[MAX][MAX];
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];
D[i][j];
}
return maxSum[i][j];
}
int main()
{
int i,j;
cin >> n;
for(i = 1;i <= n;i++)
{
for(int j = 1;j <= i;j++)
{
cin >> D[i][j];
maxSum[i][j] = -1;
}
}
cout << MaxSum(1,1) << endl;
}