hdu 1176 免费馅饼 (dp)

http://acm.hdu.edu.cn/showproblem.php?pid=1176

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int  dp[100000+10][12];
int mat[100000+10][12];
int main()
{
  int n;
  int i,j,k;
  int maxt;
  while(scanf("%d",&n),n)
  {
    memset(mat,0,sizeof(mat));
    memset(dp,0,sizeof(dp));
    maxt=-1;
    while(n--)
    {
      int x,y;
      scanf("%d%d",&x,&y);
      mat[y][x]++;
      if(maxt<y) maxt=y;
    }
    for(i=maxt;i>=0;i--)
    {
      for(j=0;j<=10;j++)
      {
        dp[i][j]=max(dp[i+1][j],dp[i+1][j+1]);
        if(j>0) dp[i][j]=max(dp[i+1][j-1],dp[i][j]);
        dp[i][j]+=mat[i][j];
      }
    }    
    printf("%d
",dp[0][5]);
  }
  return 0;
}