#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int max(int a,int b)
{return a<b?b:a;}
int main()
{
int dp[10005][11],n,t,x,i,j;
while(cin>>n)
{
if(n==0) break;
memset(dp,0,sizeof(dp));
int max_time=0;
for(i=0;i<n;i++)
{
cin>>x>>t;
dp[t][x]++;
if(max_time<t) max_time=t;
}
for(t=max_time-1;t>=0;t--)
{//利用二位反过来走求捡的最大值,最后发现dp[0][5]经过更新,会变成最大值(更新是都是在向中间靠拢)。
dp[t][0]+=max(dp[t+1][0],dp[t+1][1]);//0位置和10 位置特殊,要分开来求。
dp[t][10]+=max(dp[t+1][9],dp[t+1][10]);
for(x=1;x<10;x++)
{
dp[t][x]+=max(dp[t+1][x-1],max(dp[t+1][x],dp[t+1][x+1]));
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}
nyoj 613 免费馅饼
最新推荐文章于 2016-09-11 21:46:55 发布