标签:

6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int d[11][100001],a[11][100001];
int n,x,t,t0; 
int solve(int i,int j){
	if(i>10||i<0) return 0;	//边界处理 ,很重要 
	if(d[i][j]>=0) return d[i][j];	//已遍历过,直接返回 
	return d[i][j]=a[i][j]+(j==t0?0:max(solve(i,j+1),max(solve(i-1,j+1),solve(i+1,j+1))));
			//如果是时间边界t0,返回0 **下一秒的同一位置,下一秒的前一位置,下一秒的后一位置 
}
int main(){
	int i,j;	
	while(scanf("%d",&n)&&n){		
		t0=0;	//记录最大时间值
		memset(d,-1,sizeof(d));		//是否遍历过 
		memset(a,0,sizeof(a));		//初始化	
		for(i=0;i<n;i++){
			scanf("%d%d",&x,&t);
			a[x][t]++;	//  x 位置 , t 时间 
			t0=max(t0,t);
		}
		printf("%d\n",solve(5,0));		
	}
	return 0;
} 
标签:
原文地址:http://blog.csdn.net/z_huing/article/details/51361757