简单DP 类似于在一个矩形中求最长路径
/*************************************************************************
> Author: xlc2845 > Mail: xlc2845@gmail.com
> Created Time: 2013年10月24日 星期四 14时38分17秒
************************************************************************/ #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
#define maxn 210 using namespace std;
int dp[100010][15],n;
int main()
{
while(scanf("%d", &n) && n)
{
memset(dp, 0, sizeof(dp));
int maxt = 0;
while(n--)
{
int x,t;
scanf("%d%d",&x,&t);
dp[t][x+1]++;
maxt = max(t, maxt);
}
for(int i = maxt-1; i >= 0; i--)
{
for(int j = 1; j <= 11; j++)
dp[i][j] += max(dp[i+1][j], max(dp[i+1][j+1], dp[i+1][j-1]));
}
printf("%d\n",dp[0][6]);
}
return 0;
}