1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| import java.util.*;
class Solution {
int[][] min, max;
int[] list;
public int solution(String arr[]) {
int size = arr.length/2+1;
min = new int[size][size];
max = new int[size][size];
list = new int[size];
for (int i = 0; i < arr.length; i+=2) {
int num = Integer.parseInt(arr[i]);
if (i == 0) {
list[i/2] = num;
} else {
list[i/2] = arr[i-1].equals("+") ? num : -num;
}
}
for (int i = size-1; i >= 0; i--) {
for (int j = i; j < size; j++) {
if (i == j) {
min[i][j] = list[i];
max[i][j] = list[i];
} else {
min[i][j] = Integer.MAX_VALUE;
max[i][j] = Integer.MIN_VALUE;
func(min[i][j-1], list[j], i, j);
func(max[i][j-1], list[j], i, j);
func(list[i], min[i+1][j], i, j);
func(list[i], max[i+1][j], i, j);
}
}
}
return max[0][size-1];
}
public void func(int a, int b, int x, int y) {
if (list[x] < 0 && a < 0) {
min[x][y] = Math.min(min[x][y], Math.min(a-b,a+b));
max[x][y] = Math.max(max[x][y], Math.max(a-b,a+b));
} else {
min[x][y] = Math.min(min[x][y], a+b);
max[x][y] = Math.max(max[x][y], a+b);
}
}
}
|