还是DP问题
const int N = 5;
struct COORDINATE
{
int i;
int j;
COORDINATE(int x, int y) : i(x), j(y) {}
};
void PrintPath(int A[N][N])
{
int DP[N][N];
DP[0][0] = A[0][0];
for (int i = 1; i < N; i++)
{
DP[0][i] = DP[0][i-1] + A[0][i];
}
for (int i = 1; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (0 == j)
DP[i][j] = DP[i-1][j] + A[i][j];
else
DP[i][j] = A[i][j] + max(DP[i][j-1], DP[i-1][j]);
}
}
stack<COORDINATE> stk;
int x = N-1;
int y = N-1;
while(x != 0 || y != 0)
{
stk.push(COORDINATE(x, y));
if (0 == x)
y--;
else if (0 == y)
x--;
else
{
if (DP[x][y] == A[x][y] + DP[x-1][y])
x--;
else
y--;
}
}
stk.push(COORDINATE(0, 0));
while (!stk.empty())
{
cout<<"("<<stk.top().i<<","<<stk.top().j<<")"<<endl;
stk.pop();
}
}