分析:可以采用自底向上的方法也可以采用自顶向下的方法,这里采用第二种
#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