数塔变形题
第0秒
第1秒
第2秒
第3秒
第4秒
第5秒
第6秒
第7秒 .....................................
....... .....................................
所以实际上从第六秒开始,所有的点都能被遍及到,那么除了两个端点(0坐标以及10坐标),所有点都是被下面一秒的三个点逆推回来的,就可以从最后的状态一点点推出最开始的状态,即dp[5][0];
#include<stdio.h>
#include<string.h>
int dp[12][100005];
int pos,time;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n;
int a;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
break;
}
int i,j;
int ma=0;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d%d",&pos,&time);
dp[pos][time]++;
ma=max(time,ma);
}
for(i=ma-1;i>=0;i--)
{
dp[0][i]+=max(dp[0][i+1],dp[1][i+1]);
dp[10][i]+=max(dp[9][i+1],dp[10][i+1]);
for(j=1;j<10;j++)
{
dp[j][i]+=max(max(dp[j-1][i+1],dp[j][i+1]),dp[j+1][i+1]);
}
}
printf("%d\n",dp[5][0]);
}
}