题目地址:点击打开链接
思路:树塔问题的简单变形
AC代码:
#include<stdio.h>
#include<string.h>
int a[100010][12];
int max1(int a,int b)
{
return a>b ? a : b;
}
int max2(int a,int b,int c)
{
int max1;
max1 = a>b ? a : b;
return max1>c ? max1 : c;
}
int main()
{
int n,max,i,j;
while(scanf("%d",&n) && n!=0)
{
max = 0;
memset(a,0,sizeof(a));
while(n--)
{
scanf("%d%d",&j,&i);
if(i > max)
max = i;
a[i][j]++;
}
for(i=max-1; i>=0; i--)
{
a[i][0] += max1(a[i+1][0],a[i+1][1]);//每行的第一个只有二种选择
for(j=1; j<=10; j++)
{
a[i][j] += max2(a[i+1][j-1],a[i+1][j],a[i+1][j+1]);
}
}
printf("%d\n",a[0][5]);//不是a[1][5],刚开始吃的不一定在5,有可能在4,6
}
return 0;
}