HDU 1176 免费馅饼

作者在 2008-05-13 11:16:11 发布以下内容

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

简单dp

#include<stdio.h>
#include<string.h>
int fallx[100010][11];
int a[100001][11];
int main(){
 int i,n,x,t,max,total,sum,q,j;
 while (scanf("%d",&n)!=EOF&&n){
  memset(fallx,0,sizeof(fallx));
  memset(a,0,sizeof(a));
  for(max=0,i=0;i<n;i++){
   scanf("%d%d",&x,&t);
   fallx[t][x]++;
   if (t>max)
                max=t;
  }
  total=0;
  for(i=4;i<=6;i++){
   a[1][i]=fallx[1][i];
   if (a[1][i]>total)
    total=a[1][i];
  }
  for(i=2;i<=max;i++)
  {
   for(j=0;j<=10;j++)
   {
    if(j==0)
     sum=a[i-1][j] > a[i-1][j+1] ? a[i-1][j] : a[i-1][j+1];
    else if(j==10)
     sum=a[i-1][j-1] > a[i-1][j] ? a[i-1][j-1] : a[i-1][j];       
    else
    {
     q=a[i-1][j] > a[i-1][j+1] ? a[i-1][j] : a[i-1][j+1];
     sum=a[i-1][j-1] > q ? a[i-1][j-1] : q;
    }
    a[i][j]=sum+fallx[i][j];
    if(a[i][j]>total)
     total=a[i][j];
   }
  }
  printf("%d\n",total);
 }
 return 0;
}

ACM | 阅读 4331 次
文章评论,共0条
游客请输入验证码
最新评论