解题思路:用a[i][j]表示在第i秒在地点j的掉落馅饼的数量,
设整个馅饼掉落的时间持续为timemax,即为矩阵的高度,一共0到10个地点,为矩阵的长度,如图,即可构成数塔,因为考虑到在地点0的时候,j-1为负数,所以将地点均从1开始处理
则有
a[i-1][j]=max(max(a[i][j],a[i][j-1]),a[i][j+1])+a[i-1][j];
分别对应在每一个地点的三个选择,对应于上一秒在原地,原地左边,原地右边,

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 27201 Accepted Submission(s): 9239

#include<stdio.h>
#include<string.h>
int a[100005][15];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int i,j,timemax,n,x,y;
while(scanf("%d",&n)!=EOF&&n)
{
timemax=0;
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
x++;
a[y][x]+=1;
if(y>timemax)
timemax=y;
}
for(i=timemax;i>=1;i--)
{
for(j=1;j<=11;j++)
{
a[i-1][j]=max(max(a[i][j],a[i][j-1]),a[i][j+1])+a[i-1][j];
}
}
printf("%d\n",a[0][6]);
}
}
原文:http://www.cnblogs.com/wuyuewoniu/p/4199094.html