登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 增量元素之间的最大差值】7 v+ J9 e+ L5 u+ W# ?
( M) C( [5 b4 i
解题思路
6 U# X2 m0 E% K3 U遍历数组维护全局最小值,若当前值较大就是一个合理的答案,遍历过程取最大的合理答案即可。
, b0 a2 u. r+ P. K* v5 P
7 d, K, g( K0 B% g+ g代码展示
: r6 |. s2 S6 P. p) I- ^% }
" L3 C Q I, Z% `. u" h/ Zpublic class Solution {
6 J/ t0 a( E# V( J7 c9 \8 Q public int maximumDifference(int[] nums) {
( _: a2 k' T6 ?6 Q/ Q; i if (nums == null || nums.length == 0) {: e1 p+ m" h4 J _! K
return 0;- o5 ~1 W" R; a P2 y
}
1 Z7 o6 [4 j* H4 {. g8 C int res = -1;
) W8 S2 l/ _( I( Y9 c! {+ S int minNum = Integer.MAX_VALUE;
; ^+ G1 x6 F' D! C0 ~4 t for (int n : nums) {
! z9 \/ c8 f' o }6 P if (n > minNum) {' e' S. i+ j) m: G) u
res = Math.max(n - minNum, res);4 `) E, x! R" a( {# Z
}
( `2 X% N2 n2 T; R( e5 Y" ?4 }9 O, w; R minNum = Math.min(minNum, n);+ `' X& ~7 D$ ~4 ?1 F
}
2 N* g- F0 X- o3 R2 A; i& }" q return res;% \- Q( n1 f6 H; ?9 M( P$ X0 ]2 _
}( j. v4 f3 U, j
}
: p3 m3 [3 @$ {5 G6 g, Z9 \. b
5 o E- i7 }* ?3 n# ]
. D0 Q8 M6 {1 W0 C! F/ d【 NO.2 网格游戏】
) D& p7 |* q' F1 N& K
y5 E0 Q* ~' g H6 O J解题思路) Z! K$ G9 N& }/ F
注意到网格只有两行,所以第一个机器人需要选择的实际上就是从哪一列向下。在它确定了向下的那一列之后,第二个机器人要么只能拿到第一行开始部分的分数,要么只能拿到第一行结尾部分的分数。6 O" _2 ?. J9 y; d( O' W$ g! U' t
3 |' b, B; N. k& k代码展示
% c3 D9 H- n0 R& {$ t$ k F" V! A, G1 m& G1 r/ D
public class Solution {; h. j% Y( g- q2 g) i# c
public long gridGame(int[][] grid) {3 o% K* y. `; I8 t7 |0 g
if (grid == null || grid.length == 0 || grid[0].length == 0) {
' a: g# v' y, W return 0;) [5 B7 P4 G! f' k8 A) Z
}
% C. M7 I! ]/ i1 R, U6 D, y) J- T int n = grid[0].length;/ \3 i; D/ l9 p' ]5 L! A+ D" h# m3 u
long left = 0, rihgt = 0;# q H2 Z/ T; k6 Z8 C s$ R
for (int i = 1; i < n; i++) {
7 Q- z4 L( F* p1 t) [7 o: j! m) n rihgt += grid[0][i];
+ y0 A! y7 x( V; s% j4 ]4 u }
& N u& h3 g- z$ @ ~* F long res = rihgt;
, \5 }0 v1 j: Y* b2 b" O* R! r for (int i = 1; i < n; i++) {6 y! B( u3 i- c' G
left += grid[1][i - 1];
; u5 k2 a' Y) Q" j# B rihgt -= grid[0][i];
" }/ l5 t1 j, M" i. q% p res = Math.min(res, Math.max(left, rihgt));8 H7 e- q6 c5 b
}( r$ @9 g6 s/ U
return res;
- E8 z! i6 n# X9 q6 z$ v9 H5 o }' M$ M3 O$ G0 M ]8 h% t" \
}* L" x9 i6 R0 J' i9 i
* t- }( J$ V1 Z
$ L" [6 r! T( w' U9 H【 NO.3 判断单词是否能放入填字游戏内】
7 ~5 A/ k- `3 K, j. F" F6 f* |
6 k. j" r) d; ^3 L1 b/ C& a3 G解题思路% _) l" F& a. v6 E& P
模拟题,详情见注释。) i% N) W3 y: i3 @2 v F7 `' V
" x4 E, [2 F( z% `6 i3 T9 Y
代码展示3 p5 \' U. c7 d: i) [0 f
# C- J' p6 z# r0 ~
public class Solution {
" x2 ~4 }0 A% \$ J( F! b2 Q) z1 Z. C; Y
public boolean placeWordInCrossword(char[][] board, String word) {- H/ m5 [& l# V. r
* |9 Z9 f* Z! }: K% _) _* l if (board == null || board.length == 0 || board[0].length == 0) { _% H; @4 M# W4 G$ `" e4 K& A; Q
' q2 R/ n8 ]4 H1 u9 S. P return false;, f6 M s# W, v) }& C
# e( ]+ h( [9 e/ S& G: b
}+ \8 r3 P6 A& w) |
$ J+ k! w/ Z# v7 v int n = board.length;
0 v$ O* ?. o2 H! c5 M- W& p9 d% f [+ C- }
int m = board[0].length;
; F U, n% r5 l9 p
- l9 J& h3 z' P& E( _ for (int i = 0; i < n; i++) {
& h; y4 f) u4 u
, {& u7 S% v6 q; K5 P- k3 L; M for (int j = 0; j < m; j++) {
: K. Z! U& k; i6 p" T% s( q5 d( P: a- V+ y) Z/ C; ]" I+ R
// 从 (i, j) 开始,尝试水平地、垂直地放置单词
% N" Z( W l2 O2 f. h1 a( m0 k, h+ v3 {0 u
if (isValid(board, word, j, j + word.length() - 1, i, true) || isValid(board, word, i, i + word.length() - 1, j, false)) {& d+ T" ^8 U$ N, z: {6 K
+ t( X+ `* l8 K$ Z9 S return true;" L& t: p$ n% c! F
]. i% b' `( p5 z, F }
" J% M* O1 S5 w, z. a5 M4 b( t# o! ~& G
}
8 f5 O2 U G X: P+ K/ o# O2 f( \2 c. C: E% X/ X$ ~- C
}
6 q" ?6 Z/ B( z4 `# e
. H1 X$ g D) X& N+ m9 l/ q return false;
' W( p4 v% l$ R$ x3 O3 ^* P# n3 d3 e$ r7 V/ M# S; X1 V
}
0 y; M! J. _) ]
3 `3 c. e' z8 e7 J1 W Uprivate boolean isValid(char[][] board, String word, int start, int end, int standard, boolean isHorizontal) {; ~0 ^- G5 x/ {; N6 m+ [/ l
4 I3 f' B# l* a, J& w
// 水平放置, standard代表行, 固定不动
! h$ p ` D6 c, Y% j/ K4 u
- L& `* b4 s+ ^9 L F4 h2 G if (isHorizontal) {& I. Y' f7 y- J7 T) e0 d
2 j& r0 W( s( |% }( K if (end > board[0].length - 1) {/ F( ~+ i, Z* r
, c% d6 J" g: Z( o6 k return false;: S( N+ n8 L0 M7 Z
6 }7 u# K1 y/ z; K }
' ~# Z D* B6 P
9 O5 o' q+ o* N, V' K7 _( k+ S* b // 如果左边界不越界,检查左边界的元素是否合法
& y* A. I" F! k6 k9 a. A( b, d: p2 {4 f. p8 g% Y1 |
if (start - 1 >= 0 && (board[standard][start - 1] == ' ' || Character.isLetter(board[standard][start - 1]))) {
1 v2 M' ?9 }" r% o% B9 e' O
& H+ H' G! |. D( O* W( R6 e return false;
: `- _1 h6 d8 o) K% _. O
- n* S+ U8 Q& n4 O$ ^ }
7 b x/ [. E3 b# [2 d3 H# i) j' I1 U
' K: ~0 x" q) q+ V; y& N# p // 如果右边界不越界,检查右边界的元素是否合法
. |: D; G' n! D% e/ M* y0 K1 t2 b" S( R
if (end + 1 < board[0].length && (board[standard][end + 1] == ' ' || Character.isLetter(board[standard][end + 1]))) {
; `& ?+ j0 Q: m; j; _ V; a* ~1 }' N" g
return false;
7 q: _; Q8 D U4 w9 J4 w3 D
) S3 J1 `3 |0 Y" ` }. l) g' `. C% p
: ^. C3 w7 o5 l2 s8 r5 r // 至此,它的位置已确认是合法的了# Y5 d0 M6 @! {5 V9 o# [, z
- q; g& U! i; J# q // 接下来,只需要判断 (standard, start) ~ (standard, end) 这个区间 "是否有障碍'#'
' y6 M( _5 u* G$ U% g! e& n* C
" y9 |0 ~9 U0 K: U. B // 正反都需要判断: `, |* R+ \8 [, T1 e
$ R6 z. y* ]0 W
return check(board, word, start, end, standard, true, false) || check(board, word, start, end, standard, true, true);
" w' G( ?4 |" v7 C3 n+ x
; k8 @) f/ V6 j( F3 D0 _! |( o }/ M9 {: P6 h6 ]8 n
8 S3 }' A" ?9 p9 Z( F
// 垂直放置,standard 代表列, 固定
9 U" P' c7 b% ?. W9 S
: ~( i# ~) v: h n: Y else {' Y# r4 ]& y$ C# \3 m1 o4 W% v
+ K7 P- A4 C" E" E$ a7 n0 y# J if (end > board.length - 1) {8 u2 q% U; F6 c* A* k' }
: a. l) P% t( x# ?) g* w9 h
return false;% [% q% V$ k s# j5 ~
7 W0 h- k0 O* ?; g% h4 o8 S+ i
}
8 [# q( M) e8 _. D, f% s) _ K# \) v& n* Q% I* E
// 如果上边界不越界,检查上边界的元素是否合法
0 ]( N/ j& g& L8 Q0 P V: r
& r% ^5 p6 [; c if (start - 1 >= 0 && (board[start - 1][standard] == ' ' || Character.isLetter(board[start - 1][standard]))) {
U* m, S) [+ j1 l/ o+ Q
! m( _) Z& U& g3 q4 K! Y return false;' q2 h2 Q8 X- ?" U, q& t
' U; r! X3 a4 Q: J8 ]& B. y
}* F+ k, t+ I! C; N6 ?
4 | X/ \# D& k1 i' U: X2 u7 f
// 如果下边界不越界,检查下边界的元素是否合法
5 d6 X, ~' \% o9 U
4 b: o" o/ c' r if (end + 1 < board.length && (board[end + 1][standard] == ' ' || Character.isLetter(board[end + 1][standard]))) {4 Q/ J7 z1 c i' X2 U' _5 t
' G+ t6 ^$ i0 {& Y' y, E; h4 E return false;
: w' y+ A4 l( l* Y: p: t# u+ g: n% l1 [ f8 s
}
( q4 O' T) g, y
* f! J# d# Z! Z6 u' ] // 至此,它的位置已确认是合法的了
0 r' W% @& E9 ~" E
( u, n6 O) X/ { // 接下来,只需要判断 (start, standard) ~ (end, standard) 这个区间 "是否有障碍'#'
3 x5 a# v7 u$ l1 R$ I, Y. Z5 d8 T6 J8 l3 d+ s- R+ ~
// 正反都要判断# W: y' U* Y: Q/ N
: Z' Y0 B7 G6 F7 J return check(board, word, start, end, standard, false, false) || check(board, word, start, end, standard, false, true);
\2 c/ V8 D. t o* A9 ]6 ]
& c- }) Q8 r/ N- z% b- L$ \ }
$ N( q+ e9 S1 _" ~& v0 ]/ t
, w9 V3 ?% \- }4 E5 D% p3 h# N0 D" i, X5 \ }6 v3 g) S1 Q; V( }
U( j C5 q- @0 e( q
private boolean check(char[][] board, String word, int start, int end, int standard, boolean isHorizontal, boolean isReversed) {( i; }1 Q& Y7 Q b
3 t- r/ l N3 x if (isHorizontal) {/ G" o# m( Z( x5 b! }
& i" Q; L1 i, F# t3 J( { // 正向模拟8 x1 z' ^) X3 h! L; G9 i/ W
& {' G# s$ ^, I
if (!isReversed) {
0 b" W2 C. A) G3 L! [7 Q- \, M, [' e' W9 I
for (int i = start; i <= end; i++) {: O) z% @# I% X6 t# R ~! Y9 M7 r
* |; u$ `' e" M! l! Q/ C& z. Z
if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(i - start))) {
; S5 `$ i+ _( X8 @
& G( W' a1 s- H1 L4 ^ return false;
) {( ]; P# a2 v8 i5 ?7 m. i8 \- u
}
- Y$ V; g9 u0 m- u( @- f( `* D
( l" P8 `; T Y; F1 v) _1 \7 | }3 \/ \. y* Q2 f! B8 Z; Y
/ Y: Y B! |" j3 b2 P
}
1 M# ^( E! @; M) S# i/ @3 T6 b0 r7 d0 _/ C$ ?, U
// 反向模拟1 y( g( y( r @; I% Z" \
+ g& I- I7 s* ~* G+ e
else {& j3 l# g, x8 k8 L+ j; m2 g# ]) Q
( v* b) p0 w2 W( Q6 ~2 S for (int i = end; i >= start; i--) {
& f7 M6 j! [! J8 S
" G) J2 l; E! W: j N7 L3 |0 J if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(end - i))) {6 L h+ ^# z( f: I1 ?/ o* m
' U3 v d. [- h
return false;
8 c3 a; R! [& Z# v' B n- X X* b5 n5 `$ `# I9 ?: f4 _# ~4 l
}. e D$ ^6 z- w: e4 |' @
$ |0 b2 Y3 N' ]+ q p0 V
}! S( j6 W3 m* w0 b6 ]5 Y1 g4 _
2 q5 Q- y7 B( {0 U
}" k4 U( d' Q( `1 X
5 _0 K$ Y5 ~3 i! [# f5 \/ L( w$ T0 ] }* {) y5 _$ g' l+ p9 ~
- |, u5 o; s7 I" P else {+ U* x6 {2 k# y' r8 C0 L4 s9 w" I4 i2 z4 t
& f- f y( N% D- i5 ?
// 正向模拟8 i( Z& u$ v6 o2 d3 ]6 ^( \$ P4 r
3 \ b: X: ]* d4 h, ?5 o% g if (!isReversed) {
1 K: ^ ~2 ~( T* [
* t3 m7 P0 I! _+ i2 b7 E9 T for (int i = start; i <= end; i++) {" G7 b- k) Q5 O% {
' m5 h) S8 g. C5 ]! r if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(i - start))) {
- B, t2 n* S4 n! N4 ~0 R9 i8 N5 x: S( Z0 h3 I* o7 z
return false;
1 J3 }; h, J7 w6 l, @$ ^( m
# Y! Q) T8 p. _8 ]# @' a$ D }
2 G3 r- p3 B- W0 P0 |5 A
) I9 b& X3 p) E. n3 n- u }
; W. l1 ]4 I/ R7 o/ B8 E. y+ e& A* ]# l
}; C) N1 f0 C. r+ ?# j
. {: X2 r+ }" |- @/ y // 反向模拟8 I0 k" N! h- r7 k
4 D4 q7 o2 ?. Z- T
else {9 d8 Z+ k' P0 p2 o& [8 D1 }& O
$ \& K0 o" }+ L5 n# M for (int i = end; i >= start; i--) {4 F# ]1 E$ H% M
- K! q; d) x; Q# ]' G if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(end - i))) {, S% f1 z* ^+ Q
9 A0 B$ [: z( X
return false;
3 ]8 B d* q" u( J
6 S2 x. E! C: i. k1 x! g }8 B, w# K3 a7 E4 m S
" w# l% J ?- m1 a$ i8 K* r( r
}
& V% b9 @8 V- ^4 K- O1 X* s0 h, ~
5 G) a( Q9 O0 ~8 q }7 q, U# A. v5 |7 A% E
9 p$ w+ d. P7 H: y2 h) u
}/ _# Y9 r( p3 M5 M5 Y' x
! J( K) @5 H# F# Y# I/ A& v2 h, s return true;" J2 E8 r. G4 F X
9 M% o. B' P! I3 P0 g! C
}
; Y2 p% [3 Y( K' F$ A8 @7 i
9 l0 Q9 `* y& I# o* ]1 {& v, ?* P/ N}
# u( {4 d% _0 ]5 f- \9 I4 p+ n: a6 b! L* V; B! q# p0 }0 k
( s# y0 [' \8 i. e l
【 NO.4 解出数学表达式的学生分数】
5 g+ k0 x& x' Y% I. Q0 z
7 U+ K9 v! _5 a0 e/ V2 h# v. F解题思路, \# E: J. T/ d* l/ f
& B; y) U$ Q; o& L Z( R3 W/ Z& x; o首先理一理总体的思路,我们需要做的事情有:
9 {" H$ r: G$ W& w# V" w1 |( R. E. w! z# k' B+ Y5 d
& X" ?0 l& E1 x, ?/ p1. 求出表达式的正确值:Stack的方式解决
, Q+ F6 n5 ?' }4 ~2. 求出表达式所有可能的值:区间型动态规划解决
8 w! {* U7 G/ p! E+ H3. 计算学生的得分:计分即可& D6 J4 D& z. a4 S& c5 z( U
代码展示
% P( \6 G3 |& U! e( J+ v
. Z2 i- i A' M' j: T$ Upublic int scoreOfStudents(String s, int[] answers) {, Y' B; m! a b# k( Z7 V" X
8 H: o$ c6 ]! I int[] count = new int[1024];
% H! w4 R; H" L, Y3 }7 ]/ p- |2 @$ ]. n( x% b! B
for (int ans : answers) {- H4 b$ N! a8 Y% ]+ S5 S3 w
7 q1 t1 z: \( V count[ans]++;% ^9 s; s% m. w$ `8 |# b- F
6 x2 ^2 n- l- a0 B& r }
& l' u+ b4 g+ W$ D4 d2 q
1 a! ]8 F( y* \6 t2 ]+ y Stack<Integer> stack = new Stack<>();
6 K8 G- x, L, `8 A; D
, q$ y, n( ^1 B/ q7 j# x( }7 e; M stack.push(s.charAt(0) - '0');
( l; R/ v) O+ f# w9 a/ ~( ]" M4 S5 y
8 g6 u) ~$ w- b Q1 }" X0 E for (int i = 1; i < s.length(); i += 2) {; S5 c- \* l2 i( S8 c" g
y/ s2 v- x/ D6 e: i7 W% r. X
// 加法暂时不做,存在栈顶
0 ~# T& l, w( C* E0 ~) I
( Q% {2 e* j$ y6 O; s if (s.charAt(i) == '+') {
9 L/ o, V7 F: H( D; G( @' z) \/ ~# J+ P1 N
stack.push(s.charAt(i + 1) - '0');: f$ n: ?" m8 F" f( [4 i$ q
5 U1 h2 Y2 X3 |( N8 M E; h9 S8 s
}2 z" I$ K0 L% b, u# R* j
( D% P( W2 A. t/ `; Z0 {3 T! v2 E: j5 ^
// 乘法直接运算
; F/ [. s& ?; m S1 i+ C# Z3 @0 T# U% g' m3 _) p5 Y
else {$ Y3 [ ^* T. s
$ ?- s/ A# R& Y2 s. G7 _, ?: G$ P
stack.push(stack.pop() * (s.charAt(i + 1) - '0'));* o7 ], D$ J8 T8 K# M+ G1 o" W
9 `1 y: v; `+ ~
}
% e, @& I% e2 ]; w0 h$ B6 b0 {5 W. a7 a& P8 ~
}+ B: r8 T6 Y% a% R5 y( g# R7 H& J# K
L2 F/ F0 k5 }
int rihgtAns = 0;& t/ F: J. h* r
4 ~ X; T5 w; d3 f! b- j while (stack.size() > 0) {- F) y: s. _9 P2 o7 A
/ {$ V) F4 w0 l$ y8 C% P rihgtAns += stack.pop();- X6 o e9 r4 e$ u) l I% e
, y/ N2 ? V( q: V% y5 t' e
}: a( N+ u8 R: \8 x0 w' G' H+ o: ]
# L: T- T- A0 b6 M! n
// 计算正确的人数积分
$ c' O. x5 P! o6 B; u: w0 o
' K% s9 u) Y3 f1 l int res = count[rihgtAns] * 5;
* S! r3 x5 v) W0 b0 [
$ R7 ], |% V, C( D# G
* R5 r' G+ v7 _: C; m# j \
3 r! g' \) [5 t/ E6 \" j/ Z // 枚举所有可能的计算结果
5 H! Y3 m+ n9 @" m" P) Z
) |3 t' J- m' A2 Y: p int n = s.length();/ t' `2 d" S) B
/ F5 [$ B7 y9 g& w Set<Integer>[][] dp = new Set[n + 2][n + 2];
0 J( A5 ?* u) s4 {0 Q9 f* f5 S
for (int i = 0; i < n + 2; i++) {
, N, w: l! F. h/ ^ n! E1 ?
% Q8 [1 Z: x& ]1 j" [ S for (int j = 0; j < n + 2; j++) {
' ?! ? G2 A4 c( u+ ] l1 t3 `5 C& `) M# y
dp[i][j] = new HashSet<>();
d' [& f: u6 v: M
: k$ d) L! J5 O; w; l- { }
) ]( L6 H6 [1 n- y# q9 B% ^. b& b! a5 }9 m$ d6 {7 m
}
o) c- V% ]. h5 R6 j& @9 _7 z! a8 K
for (int j = 0; j < n; j += 2) {
1 M1 ?( I3 \% p# V2 D& [
5 }0 S' w% D/ q+ b+ i dp[j][j].add(s.charAt(j) - '0');; v; \+ R2 |: S' Y, a* \
' u$ U1 M2 c; a/ j( u
}6 J8 P y4 L6 V W& @
4 t' c# I$ k# h& x+ M% M
// 区间型动态规划
# i! H* u0 r# e$ j5 f8 {: Y) c; p* z* s0 {7 W# V
for (int len = 2; len < n; len++) {
+ Q; x Q( J# P. [3 D
' k% g; {. E+ _9 f: Z' K // 左端点 i' \* F2 U j$ D
; [- }: A0 C" R" ^2 m for (int i = 0; i + len < n; i += 2) {& t/ t& E4 y. s- C" \9 x# W) c( p
/ a3 \% {2 f* j // 枚举左半部分的长度
& T! i v' C/ u( `3 r: U# z
$ r* [$ ~) x4 J+ U/ L5 Y2 p2 E& [ for (int leftLen = 0; leftLen < len; leftLen += 2) {7 `$ {: P+ Q5 ?: B
# B7 X& ]" q0 ^3 @4 q$ \2 C" F
// left 表示左半部分的值9 V0 q& [ c3 h3 N& v
; }/ w7 f6 r1 C; b // right 表示右半部分的值& D0 N" E/ t, |* T; K1 V1 g7 x
2 D6 L0 Y0 w5 _7 K' |( s for (int left : dp[i][i + leftLen]) {, A, }- v4 L* \3 }
3 U0 D/ Y( R- F2 A N6 e( V+ e for (int right : dp[i + leftLen + 2][i + len]) {
3 ?, S$ f1 R! n# D8 p# {2 f4 ~+ j+ ~
if (s.charAt(i + leftLen + 1) == '+') { O3 F2 p7 S1 l- A+ S4 o/ f
, F& @3 ~3 T+ G; v: I
if (left + right <= 1000) {7 L9 f x. b: t0 b: K9 V2 D, j4 V4 b* g
" z b3 ~; J, A dp[i][i + len].add(left + right);. z0 B; H! k0 F2 I
: j6 o/ Y( ?" m% p" [! g6 J
}
! v* Q4 @/ y; ^ q7 ?2 T# C* P: C- A( s( B2 Y' S) u% Y3 @
} else {
$ i& [# V" n i1 L" g4 B' ~; x p
' b7 K& u, b: G7 \ if (left * right <= 1000) {
! v* X% f2 A/ K& ^0 Q/ T( o$ h: }6 @7 p; g! {( G
dp[i][i + len].add(left * right); z& G' k9 {1 g
5 z7 k( e( a, x ~" a" f* i }
( d- v" e' s+ c5 ?
1 `9 `# J( O3 ~4 D' Q# Y }
9 A/ o# c/ I b/ Y. i/ Z" |/ d- g3 l
}
$ f2 W/ O! g% N/ D' y( A$ r ~' @ l) ?# V
}1 \' H8 X& o( N; D4 H% l
5 t2 r6 x- A5 s% Q2 w
}
0 ?+ D0 D! c8 j" `+ i6 j( Z. F3 `5 l8 Q3 P( g
}
( z2 B0 ^& g) u( ]& `1 ~9 _9 N) Y1 `0 G" V0 Q" x7 f( b+ ^! W
}6 N; a2 N9 o& z
/ w, ` ]3 k. E( @! a) i6 G, e5 A
; y" u1 z! @1 b% g# [( F
5 ]* B/ L+ K0 C3 ^ D' ` for (int points : dp[0][n - 1]) {; U' X( }3 q3 q% k. Y, B
- b4 r$ K4 _2 [, l3 w
if (points != rihgtAns) {
l- k! ~9 J- w2 q
& e- A- P: ?2 a C res += 2 * count[points];
# {; z$ Y: Z0 [6 _9 S3 q4 a9 \( t- W1 u/ h" ~
}& z( ?4 C6 m" I; a. j: O( g
1 f. L( X" J% z/ x! P- d3 `
}
% o) z2 H4 R' b
# _3 S: K- d7 \0 f6 U) I# y return res;
* s3 ]6 `% y. w7 N
5 |- u7 u: u% G4 N: ?' j1 A } |