https://vjudge.net/contest/68966#problem/G
正解一:
http://www.clanfei.com/2012/04/646.html
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath> 7 #define INF 0x3f3f3f3f 8 using namespace std; 9 const int maxn=1e5+1; 10 int a[11][maxn]; 11 int dp[11][maxn]; 12 13 bool check(int x) 14 { 15 if(x>=0&&x<=10) 16 { 17 return 1; 18 } 19 return 0; 20 } 21 int main() 22 { 23 int n,x,y,maxtime; 24 while(scanf("%d",&n)==1&&n) 25 { 26 maxtime=-INF; 27 memset(a,0,sizeof(a)); 28 for(int i=0;i<n;i++) 29 { 30 scanf("%d%d",&x,&y); 31 a[x][y]++; 32 maxtime=max(maxtime,y); 33 } 34 memset(dp,0,sizeof(dp)); 35 for(int i=maxtime-1;i>=0;i--) 36 { 37 for(int k=0;k<=10;k++) 38 { 39 dp[k][i]=dp[k][i+1]; 40 if(check(k-1)) 41 { 42 dp[k][i]=max(dp[k][i],dp[k-1][i+1]); 43 } 44 if(check(k+1)) 45 { 46 dp[k][i]=max(dp[k][i],dp[k+1][i+1]); 47 } 48 dp[k][i]+=a[k][i]; 49 } 50 } 51 printf("%d\n",dp[5][0]); 52 } 53 return 0; 54 }