1176
DP
Sample Input
6
5 1
4 1
6 1
7 2
7 2
8 3
0
Sample Output
4
#include<bits/stdc++.h>
using namespace std;
int dp[100010][15];
int main()
{
int n;
while(scanf("%d",&n),n)
{
int T=0; //最大时间
memset(dp,0,sizeof(dp));
int x,t;//馅饼点和时间
for(int k=0;k<n;k++)
{
scanf("%d%d",&x,&t);
if(t>T)
T=t;
dp[t][x]++;
}
//初始化位置
for(x=0;x<11;x++)
if(x!=5&&x!=4&&x!=6)
dp[1][x]=0;
for(t=2;t<=T;t++)
{
dp[t][0]=max(dp[t-1][0],dp[t-1][1])+dp[t][0];
for(x=1;x<10;x++)
dp[t][x]=max(max(dp[t-1][x-1],dp[t-1][x]),dp[t-1][x+1])+dp[t][x];//两边
dp[t][10]=max(dp[t-1][10],dp[t-1][9])+dp[t][10];
}
int ans=-1;
for(int x=0;x<=10;x++)
{
if(dp[T][x]>ans)
ans=dp[T][x];
}
printf("%d\n",ans);
}
}