dp[i][j] 为第I分钟在位置j所能获得的最多馅饼,根据题意我们可以知道,
dp[i][j] = max(dp[i-1][j], max(dp[i-1][j+1],dp[i-1][j-1]) + num[i][j];
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define MAXN 100010
int num[MAXN][12];
int dp[MAXN][12];
int main()
{
int n;
while(scanf("%d",&n) != EOF && n)
{
int t, p, maxt;
maxt = 0;
memset(num, 0, sizeof(num));
memset(dp, 0, sizeof(dp));
for( int i = 1; i <= n; i++)
{
scanf("%d %d",&p, &t);
num[t][p]++;
maxt = max(maxt, t);
}
int ans = 0;
dp[1][4] = num[1][4];
dp[1][6] = num[1][6];
dp[1][5] = num[1][5];
for( int i = 2; i <= maxt; i++)
{
for( int j = 0; j <= 10; j++)
{
dp[i][j] = dp[i-1][j];
if(j > 0)
dp[i][j] = max(dp[i-1][j-1],dp[i][j]);
if(j < 10)
dp[i][j] = max(dp[i-1][j+1],dp[i][j]);
dp[i][j] += num[i][j];
//ans = max(ans, dp[i][j]);
}
}
for ( int i = 0 ; i < 11 ; ++ i )
ans = max( ans, dp[maxt][ i ] ) ;
printf ( "%d\n" , ans ) ;
}
return 0;
}