地址: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 }