
6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
#include<stdio.h>
#include<string.h>
int a[100100][15];
int max(int a,int b)
{
if(a<b)
return b;
else
return a;
}
int main()
{
int n,maxi,i,t,x,j;
while(~scanf("%d",&n),n)
{
maxi=0;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&t);
a[t][x]++;
if(maxi<t)
maxi=t;
}
for(i=maxi-1;i>=0;i--)
{
for(j=0;j<=10;j++)
{
if(j==0)
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);//因位于一个边界,所以只有两种选择
else if(j==10)
a[i][j]+=max(a[i+1][j-1],a[i+1][j]);
else
a[i][j]+=max(max(a[i+1][j-1],a[i+1][j]),a[i+1][j+1]);//可以有三处可以选择的
}
}
printf("%d\n",a[0][5]);//起始位置,也是塔的顶点。
}
return 0;
} hdu 1176 免费馅饼 (dp 数塔类型),布布扣,bubuko.com
原文地址:http://blog.csdn.net/ice_alone/article/details/38707603