数塔变形
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 int a[100010][15]; 11 int main(int argc, char *argv[]) 12 { 13 int n,xmax,tmax; 14 while(scanf("%d",&n)!=EOF) 15 { 16 if(n==0) 17 break; 18 memset(a,0,sizeof(a)); 19 xmax=0;tmax=0; 20 for(int i=0;i<n;i++) 21 { 22 int x,t; 23 scanf("%d%d",&x,&t); 24 a[t][x]++; 25 tmax=max(tmax,t); 26 } 27 for(int i=tmax-1;i>=0;i--) 28 { 29 a[i][0]+=max(a[i+1][0],a[i+1][1]); 30 for(int j=1;j<=10;j++) 31 { 32 a[i][j]+=max(max(a[i+1][j],a[i+1][j+1]),a[i+1][j-1]); 33 } 34 } 35 36 printf("%d\n",a[0][5]); 37 } 38 return 0; 39 }