#include <stdio.h>
#define SZ 15
#define END (SZ-1)
int data[SZ][SZ] =
{
{75},
{95, 64},
{17, 47, 82},
{18, 35, 87, 10},
{20, 4, 82, 47, 65},
{19, 1, 23, 75, 3, 34},
{88, 2, 77, 73, 7, 63, 67},
{99, 65, 4, 28, 6, 16, 70, 92},
{41, 41, 26, 56, 83, 40, 80, 70, 33},
{41, 48, 72, 33, 47, 32, 37, 16, 94, 29},
{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14},
{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57},
{91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48},
{63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31},
{ 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23}
};
int buffer[SZ][SZ];
int test(int i, int j)
{
if(j>i) //j>i时是上面数组中没有显式标明数字的那些区域,不参与运算
{
return 0;
}
int sum, sumLeft=0, sumRight=0, ni, nj; // ni: next i
int currentNode;
currentNode = data[i][j];
if(i==END)
{
return currentNode;
}
ni = i+1;
nj = j+1;
if(ni<SZ)
{
if(buffer[ni][j] != 0)
{
sumLeft = buffer[ni][j];
}
else
{
sumLeft = test(ni, j);
buffer[ni][j] = sumLeft;
}
}
if(nj<SZ)
{
if(buffer[ni][nj] != 0)
{
sumRight = buffer[ni][nj];
}
else
{
sumRight = test(ni, nj);
buffer[ni][nj] = sumRight;
}
}
sum = currentNode + (sumLeft>sumRight ? sumLeft:sumRight);
buffer[i][j] = sum;
return sum;
}
int main()
{
printf("result is %d\n", test(0,0));
return 0;