运行程序这里会报错 dp[i] = dp[ghs[l].get(r + c)] + v;
时间: 2023-10-03 18:08:17 浏览: 41
这个错误是因为 `ghs[l].get(r + c)` 返回的值可能为 null,因此在使用它进行计算时会抛出 NullPointerException 异常。为了解决这个问题,可以在使用 `ghs[l].get(r + c)` 之前,先判断一下它是否为 null,如果是 null,则代表之前没有计算出对应的值,需要先进行初始化。
修改后的 Java 代码如下:
import java.util.*;
public class Main {
private static final int MAXN = 2 * 100000 + 10;
private static Map<Integer, Integer>[] ghs = new Map[MAXN];
private static int[] dp = new int[MAXN];
private static int[] nxt = new int[MAXN];
private static int[] ans = new int[MAXN];
private static int n, head;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
for (int i = 1; i <= n; i++) {
int v = scanner.nextInt();
int c = scanner.nextInt();
int l = scanner.nextInt();
int r = scanner.nextInt();
if (ghs[l] == null) {
ghs[l] = new HashMap<Integer, Integer>();
}
if (l == 0 || ghs[l].containsKey(r + c)) {
Integer pre = ghs[l].get(r + c);
if (pre == null) {
pre = 0;
}
dp[i] = dp[pre] + v;
nxt[i] = pre;
if (r == 0 && dp[i] > dp[head]) {
head = i;
}
if (!ghs[l + c].containsKey(r) || dp[i] > dp[ghs[l + c].get(r)]) {
ghs[l + c].put(r, i);
}
}
}
int idx = 0;
for (int i = head; i != 0; i = nxt[i]) {
ans[idx++] = i;
}
System.out.println(idx);
for (int i = idx - 1; i >= 0; i--) {
System.out.print(ans[i] + " ");
}
}
}