#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
const int INF=1e8;
int dp[maxn][11];
int n;
struct node{
int a,b;
}e[maxn];
int cmp(node x,node y)
{
return x.b<y.b;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
int i,j,k,m,t;
for(i=0;i<n;i++)
scanf("%d%d",&e[i].a,&e[i].b);
for(i=0;i<=10;i++)
dp[0][i]=-INF;
dp[0][5]=0;
sort(e,e+n,cmp);
m=e[n-1].b;
t=0;
for(i=1;i<=m;i++)
{
for(j=1;j<10;j++)
dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i-1][j+1]));
dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
dp[i][10]=max(dp[i-1][10],dp[i-1][9]);
while(t<n&&e[t].b==i){dp[i][e[t].a]++;t++;}
}
int ans=0;
for(i=0;i<=10;i++)
ans=max(ans,dp[m][i]);
printf("%d\n",ans);
}
return 0;
}
/*
dp[i][j]表示第i秒时,位置在j的最大接饼数。
*/
hdu 1176 免费馅饼 dp
最新推荐文章于 2021-01-30 15:39:08 发布