SDUT OJ
I题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100100
int dp[MAX][20], data[MAX][20];
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int n, i, j;
while (~scanf("%d", &n) && n)
{
int maxt = 0;
memset(dp, 0, sizeof(dp));
memset(data, 0, sizeof(data));
for (i = 1; i <= n; i++)
{
int t, x;
scanf("%d %d", &x, &t);
maxt = max(maxt, t);
data[t][x]++;
}
for (i = maxt; i >= 0; i--)
{
for (j = 0; j <= 10; j++)
{
dp[i][j] = dp[i + 1][j];
if (j != 0) dp[i][j] = max(dp[i][j], dp[i + 1][j - 1]);
if (j != 10) dp[i][j] = max(dp[i][j], dp[i + 1][j + 1]);
dp[i][j] += data[i][j];
}
}
printf("%d\n", dp[0][5]);
}
}