时间作为层数,每层有11个
最大层数需输入时找出最大时间
从倒数第二层出发,判断正下面,下面左边和下面右边谁最大(共11列)
注意 第0列 和 第11列 边界问题
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
long long dp[N][11];
int main(){
int n;
int x,t;//x为坐标,t为时间
int max_t=-1;//标记最后一行 (i的最大取值)
while(cin>>n){
if(n==0) break;
memset(dp,0,sizeof(dp));
while(n--){
cin>>x>>t;
dp[t][x]++;
if(max_t<t) max_t=t;
}
for(int i=max_t-1;i>=0;i--)
for(int j=0;j<=10;j++){
if(j==0) dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]);
else if(j==10) dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j]);
else dp[i][j]+=max(dp[i+1][j+1],max(dp[i+1][j-1],dp[i+1][j]));
}
cout<<dp[0][5]<<endl;
}
return 0;
}