1 #include<stdio.h>
2 int sum[100005][15]={0},map[100005][15]={0};//map[t][x]记录在t秒时第x个位置有几个馅饼落下
3 int max(int a,int b,int c)
4 {
5 if(a<b) a=b;
6 if(a<c) a=c;
7 return a;
8 }
9 //返回三个数中最大数的函数
10 int main()
11 {
12 int i,j,k,l,n,m,maxtime,maxsum,a,b;
13 while(scanf("%d",&n)!=EOF)
14 {
15 if(n==0) break;
16 maxtime=0;
17 for(i=1;i<=n;i++)
18 {
19 scanf("%d%d",&a,&b);
20 map[b][a]++;
21 if(maxtime<b) maxtime=b;//maxtime记录最大时间
22 }
23 for(i=0;i<=maxtime;i++)
24 for(j=0;j<12;j++)
25 sum[i][j]=0;
26 //对sum数组清零
27 for(i=1;i<5;i++)
28 for(j=i+1;j<=5;j++)
29 {
30 map[i][5+j]=0;
31 map[i][5-j]=0;
32 }
33 //注意:因为前5秒时有些地方是到不了的,所以那里的馅饼直接无视清零;
34 for(i=1;i<=maxtime;i++)
35 {
36 for(j=0;j<11;j++)
37 {
38 sum[i][j]=max(sum[i-1][j-1],sum[i-1][j],sum[i-1][j+1])+map[i][j];//dp方程;
39 }
40 }
41 maxsum=0;
42 for(i=0;i<12;i++)
43 {
44 if(sum[maxtime][i]>maxsum) maxsum=sum[maxtime][i];
45 }//选出最后时间中获得馅饼最多的数量;
46 printf("%d\n",maxsum);
47 for(i=1;i<=maxtime;i++)
48 for(j=0;j<11;j++)
49 map[i][j]=0;
50 //把map清零;
51 }
52 }