#include "cstdio"
#include "iostream"
#include "cstring"
#include "algorithm"
using namespace std;
const int INF=0x3f3f3f3f;
const int N=100005;
int dp[N][11],a[N][11];//dp[i][j] i为时间 j为地点
int main()
{
int n;
while(scanf("%d",&n)!=EOF&& n)
{
int MAX=0;//最大时间
int x,y;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);//x 地点 y时间
a[y][x]++;//因为同一个地点,同一时间可能有多个;
if(MAX<y)
MAX=y;
}
int ans=0;
//边缘初始化
for(int i=0;i<11;i++)
{
if(i!=5) dp[0][i]=-INF;
}
for(int i=1;i<=MAX;i++)//时间
{
//最边上 要分开来单独考虑
dp[i][0]=max(dp[i-1][0],dp[i-1][1])+a[i][0];
for(int j=1;j<10;j++)
{//左中右 三个地方,在加上自己这一时间的
dp[i][j]=max(max(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1])+a[i][j];
}
dp[i][10]=max(dp[i-1][9],dp[i-1][10])+a[i][10];
}
for(int i=0;i<=10;i++)
{
ans=max(ans,dp[MAX][i]);
}
printf("%d\n",ans);
}
return 0;
}
HDU 1176
最新推荐文章于 2018-11-10 23:38:16 发布