分析:可以采用自底向上的方法也可以采用自顶向下的方法,这里采用第二种
#include<iostream>
using namespace std;
int dp[15][100010];
int main()
{
int i,j,maxt,t,n,x,temp;
while(scanf("%d",&n) && n)
{
maxt=0;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d %d",&x,&t);
dp[x+1][t]++;
maxt=maxt>t?maxt:t;
}
for(i=maxt-1;i>=0;i--)
for(j=1;j<=11;j++)
{
temp=dp[j+1][i+1];
temp=temp>dp[j][i+1]?temp:dp[j][i+1];
temp=temp>dp[j-1][i+1]?temp:dp[j-1][i+1];
dp[j][i]=temp+dp[j][i];
}
printf("%d\n",dp[6][0]);
}
return 0;
}原文地址:http://blog.csdn.net/a809146548/article/details/45250051