这题把5作为数塔的顶点,因为最多移动左右一步,也可以原地不动,这样就成了一个数塔问题了,
特殊处理下节点10和节点0,还有它同一时刻同一地点可能不止掉一个,也就是说数据会重复出现
方程:dp[t][i]=Max(Max(dp[t+1][i-1],dp[t+1][i+1]),dp[t+1][i])+dp[t][i]
代码:
#include<stdio.h>
#include<string.h>
int dp[100010][15];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,t,x,totalt,temp;
int i,j;
while(scanf("%d",&n)!=EOF && n!=0)
{
memset(dp,0,sizeof(dp));
totalt=-1;
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&t);
dp[t][x]++;//同一位置可掉多个馅饼
if(totalt<t) totalt=t;
}
for(t=totalt-1;t>=0;t--)
{
for(i=0;i<=10;i++)
{
if(i==0)
{
dp[t][i]=Max(dp[t+1][i+1],dp[t+1][i])+dp[t][i];
}
else if(i==10)
{
dp[t][i]=Max(dp[t+1][i-1],dp[t+1][i])+dp[t][i];
}
else
{
dp[t][i]=Max(Max(dp[t+1][i-1],dp[t+1][i+1]),dp[t+1][i])+dp[t][i];
}
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}