hdu 1176 免费馅饼

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n;
int a[11][100100];
int maxt;
int d[11][100010];//d[i][j]表示在i地点j时间已经获得的最大值
bool in(int x)
{
    return x>=0&&x<=10;
}
int main()
{
    while(scanf("%d",&n),n)
    {
        int i;
        int x,tt;
        memset(a,0,sizeof(a));
        maxt=0;
        for(i=0;i<n;i++)
        {
            scanf("%d %d",&x,&tt);
            a[x][tt]++;
            maxt=maxt>tt?maxt:tt;
        }
        for(i=0;i<=10;i++)
        {
            if(i==5||i==4||i==6)
            {
                d[i][1]=a[i][1];
            }
            else
            {
                d[i][1]=0;
            }
        }
        int mmax;
        int j;
        for(j=2;j<=maxt;j++)
        {
            for(x=0;x<=10;x++)
            {
                mmax=d[x][j-1];
                if(in(x-1))
                {
                    mmax=mmax>d[x-1][j-1]?mmax:d[x-1][j-1];
                }
                if(in(x+1))
                {
                    mmax=mmax>d[x+1][j-1]?mmax:d[x+1][j-1];
                }
                d[x][j]=mmax+a[x][j];
            }
        }
        int ans=d[0][maxt];
        for(i=1;i<=10;i++)
        {
            if(ans<d[i][maxt])
            {
                ans=d[i][maxt];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
posted @ 2012-08-12 21:56  willzhang  阅读(125)  评论(0编辑  收藏  举报