地址:http://acm.hdu.edu.cn/showproblem.php?pid=1176

题意:中文。

mark:dp即可。。。类似数塔。

代码:

 1 # include <stdio.h>
 2 # include <string.h>
 3 
 4 
 5 int dp[100010][11] ;
 6 int n , INF = 0x0f0f0f0f ;
 7 
 8 
 9 int main ()
10 {
11     int i, j, k, buff, x, t ;
12     int max_t, ans ;
13     while (~scanf("%d",&n)&&n)
14     {
15         memset (dp, 0, sizeof(dp)) ;
16         for(i = 0 ; i<= 10 ; i++)dp[0][i] = -INF ;
17         dp[0][5] = 0 ;
18         for(i = 0, max_t = 0 ; i < n ; i++)
19         {
20             scanf("%d%d", &x, &t) ;
21             dp[t][x] ++ ;
22             if (t > max_t) max_t = t ;
23         }
24         ans = 0 ;
25         for (i = 1 ; i <= max_t ; i++)
26             for (j = 0 ; j <= 10 ; j++)
27             {
28                 buff = -INF ;
29                 for (k = j-1 ; k <= j+1 ; k++)
30                 {
31                     if (k < 0 || k > 10) continue ;
32                     if (buff < dp[i-1][k]) buff = dp[i-1][k] ;
33                 }
34                 dp[i][j] += buff ;
35                 if (dp[i][j] > ans) ans = dp[i][j] ;
36             }
37         printf ("%d\n", ans) ;
38     }
39     return 0 ;
40 }