#include<bits/stdc++.h>
using namespace std;
#define MXM 100010
#define MXN 15
int dp[MXM][MXN];
int main ()
{
int T,t,n,i,j,x;
while(scanf("%d",&n),n)
{
T=0;memset(dp,0,sizeof dp);
while(n--)
{
scanf("%d%d",&x,&t);
dp[t][x]++;
if(T<t) T = t;
}
for(i = T;i>=0;i--)
{
for(j = 0;j<=10;j++)
{
dp[i][j]+=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]));
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}
本质仍是数塔问题,不妨仍从塔底考虑(逆路径)递推思想:从哪来
添加链接描述