6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[100010][12]; int main() { int n,x,i,j,t,m; while(scanf("%d",&n)&&n) { memset(dp,0,sizeof(dp)); m=0; while(n--) { scanf("%d %d",&x,&t); dp[t][x]++; if(m<t) { m=t; //找出时间最长的时间点 } } for(i=m-1; i>=0; i--) { dp[i][0] += max(dp[i+1][0],dp[i+1][1]); for(j=1; j<=10; j++) { dp[i][j] += max(max(dp[i+1][j],dp[i+1][j+1]),dp[i+1][j-1]); } } printf("%d\n",dp[0][5]); //0秒时人的初始位置 } return 0; }
原文地址:http://blog.csdn.net/holyang_1013197377/article/details/40045559