题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176
题目类型:动态规划
题解:记录最长时间,然后从后往前看,走dp,不难得出a[i][j]=a[i][j]+Math.max(Math.max(a[i + 1][j], a[i + 1][j + 1]), a[i + 1][j - 1])
,注意j=0时的情况。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int x, t, time;
while (kb.hasNext()) {
time = 0;
int a[][] = new int[100005][12];
int n = kb.nextInt();
if (n == 0)
break;
for (int i = 0; i < n; i++) {
x = kb.nextInt();
t = kb.nextInt();
a[t][x]++;
time = Math.max(time, t);
}
for (int i = time - 1; i >= 0; i--) {
for (int j = 0; j <= 10; j++) {
if (j == 0) {
a[i][j] += Math.max(a[i + 1][j], a[i + 1][j + 1]);
} else {
a[i][j] += Math.max(Math.max(a[i + 1][j], a[i + 1][j + 1]), a[i + 1][j - 1]);
}
}
}
System.out.println(a[0][5]);
}
kb.close();
}
}