如题:HDU ACM-1176,问题地址链接http://acm.hdu.edu.cn/showproblem.php?pid=1176
问题解析:由下往上,二维矩阵中求路径加权,算得最佳路径。
代码如下:
#include <stdio.h>
#include <memory.h>
#define COL_COUNT 11
int max(int a, int b, int c)
{
int nMax = a;
if (b > nMax)
{
nMax = b;
}
if (c > nMax)
{
nMax = c;
}
return nMax;
}
int main()
{
while (1)
{
int n = 0;
scanf("%d", &n);
if (0 == n)
{
break;
}
int *pData = new int[100005 * COL_COUNT];
memset(pData, 0, sizeof(int) * 100005 * COL_COUNT);
int maxT = 0;
for (int i = 0; i < n; i++)
{
int x, T;
scanf("%d %d", &x, &T);
pData[T * COL_COUNT + x]++;
if (T > maxT)
{
maxT = T;
}
}
for (int nRowIndex = maxT - 1; nRowIndex >= 0; nRowIndex--)
{
for (int j = 0; j < COL_COUNT; j++)
{
int nSubMax = 0;
if (0 == j)
{
nSubMax = max(0, pData[(nRowIndex + 1)*COL_COUNT + j], pData[(nRowIndex + 1)*COL_COUNT + j + 1]);
}
else if (COL_COUNT - 1 == j)
{
nSubMax = max(pData[(nRowIndex + 1)*COL_COUNT + j], pData[(nRowIndex + 1)*COL_COUNT + j - 1], 0);
}
else
{
nSubMax = max(pData[(nRowIndex + 1)*COL_COUNT + j - 1], pData[(nRowIndex + 1)*COL_COUNT + j], pData[(nRowIndex + 1)*COL_COUNT + j + 1]);
}
pData[nRowIndex*COL_COUNT + j] += nSubMax;
}
}
printf("%d\n", pData[5]);
}
return 0;
}