登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 增量元素之间的最大差值】. \! k' V8 o9 C1 v
" M& l$ m2 }# d9 C$ ?1 L- u& h7 J- ]
解题思路% l- R6 w) ?9 E6 @- L( m
遍历数组维护全局最小值,若当前值较大就是一个合理的答案,遍历过程取最大的合理答案即可。
& f6 `7 a4 ^3 C' \9 O
) Q" _0 N m7 h4 p$ G8 P代码展示
! b" ~- u0 G$ Y! J1 D. }# p/ S
# O% C( F7 w/ c: U! `public class Solution {; j7 ^" d/ q9 S! P( q# H9 y5 p5 S9 ?
public int maximumDifference(int[] nums) {" R- C# E. m! s/ Q
if (nums == null || nums.length == 0) {
$ ]) Y$ W ]+ [6 t: m return 0;9 j3 T. q# V! |- {, _2 L
}% s; M: o0 i; }5 ^/ C* X
int res = -1;
) g1 i( R2 K' I int minNum = Integer.MAX_VALUE;
) G: {; E# N) j( X& k for (int n : nums) {
7 y$ U& Z4 [; T6 t if (n > minNum) {- _2 s0 |! t. p7 ^$ q$ @
res = Math.max(n - minNum, res);" S8 j1 T, O. p4 z+ E2 p
}* h! U r' c% {( q
minNum = Math.min(minNum, n);( V1 F3 V; e9 @7 Q; u# }: W
}0 v8 ~: A0 e4 w5 \! a
return res;4 J# n( X2 k& X4 }* A
}
% q0 n1 f' {6 S% d# M; V}5 A8 N3 A! i2 X; z4 p2 x) {0 r
; Q$ q. s$ A+ [. s+ P5 P; z
* S- [. B/ U! D. w, ]【 NO.2 网格游戏】! x ?" L% ~; |1 {/ M6 f
9 G0 a4 d3 I9 E# X3 t1 ?9 {% b
解题思路
! p+ F" k3 g/ \注意到网格只有两行,所以第一个机器人需要选择的实际上就是从哪一列向下。在它确定了向下的那一列之后,第二个机器人要么只能拿到第一行开始部分的分数,要么只能拿到第一行结尾部分的分数。
9 S' ~4 I& ?9 E% {
i9 m6 O1 S4 ]- j代码展示
' O. n. i: i. H1 }- y) Z$ G' h' I9 K5 p
0 ]% y+ R) v% a' E" S& h& F& g0 t+ jpublic class Solution {
, f( L5 y" c% u public long gridGame(int[][] grid) {
* k* Y8 o# b/ C; B Y g3 d, z if (grid == null || grid.length == 0 || grid[0].length == 0) {1 L0 u9 c+ L# K: p, g
return 0;
" D( w' e# n6 B) t: p: t9 { }
- b9 T; p; I2 ? int n = grid[0].length;' }: `: n6 J0 x; j7 s0 g
long left = 0, rihgt = 0;$ D; i* U j% u: \! `1 G6 Y8 }) ^2 t* p
for (int i = 1; i < n; i++) {
7 ^9 l' F. x: S1 C! }2 b( O rihgt += grid[0][i];
" r* [" w5 v7 o4 n4 j& E, u( k% |& b }
8 W) G6 Z% u2 b# g. d long res = rihgt;
: X0 W4 Q# S3 }% L% y for (int i = 1; i < n; i++) {& \$ D; Z; e! j8 ~$ O/ Y
left += grid[1][i - 1];) s# f$ W$ g( F; A5 O/ U; Y
rihgt -= grid[0][i];
/ m5 p1 e# c; w res = Math.min(res, Math.max(left, rihgt));3 X, W6 m; v$ y( b7 Z2 |
}
9 G2 c# l& n H. S! t: R4 k/ l. | return res;
7 J/ G( C& N9 T' o2 Y) Z }
; @2 A- e( w }- T) [" ?}% X# h; c$ D b2 L- d+ q2 p
" i6 H3 _, }! C9 e* F5 y% |2 z2 h2 l4 w) D
【 NO.3 判断单词是否能放入填字游戏内】
7 |& a, q1 O- `% |! y3 l& \5 \: |" L, M/ ]" |8 F! Z9 x- l! P
解题思路; h4 Z. W7 H) s$ Q/ B
模拟题,详情见注释。
, ~3 s. J- H% d- l: n: _/ U! K! ]! T; l# A$ {1 C9 V
代码展示
: y& o* h$ Q. y
/ ?, J) e0 q) @ o8 Kpublic class Solution {
+ b7 \9 j7 L/ M1 ^, n( A) Y$ X8 e/ _9 g) M0 \
public boolean placeWordInCrossword(char[][] board, String word) {! E' X7 ?6 f' t. ]
7 |3 E- r" U5 t% o7 W if (board == null || board.length == 0 || board[0].length == 0) {
6 s7 Q$ X/ B3 c# D1 Y9 q
1 `9 }7 ]* S7 j6 N return false;
3 K s: }3 f; j- Y3 e
" o# D7 [9 S9 D( o* i0 H% B }
4 f y# L# z" ?0 b3 b8 N4 w" U1 K# E! U
int n = board.length;# w1 `7 e; D; L0 I' T
9 T0 s# W! n% n: y, O0 G int m = board[0].length;' j2 n2 j, b5 O" d" r
6 K- Y; |. b6 j! N+ ^$ n for (int i = 0; i < n; i++) {
6 ]5 m- g- J1 M1 ^5 d
* y! i5 K+ e. J6 ]' M+ I: u" @! V for (int j = 0; j < m; j++) {/ w! H. C6 T8 e. s
y4 p) _# ?0 f8 r& H
// 从 (i, j) 开始,尝试水平地、垂直地放置单词: O/ P0 {0 _% A3 ~+ G8 f3 I
0 j9 S9 o' M, ?+ s6 c5 G
if (isValid(board, word, j, j + word.length() - 1, i, true) || isValid(board, word, i, i + word.length() - 1, j, false)) {
) c p' q- }$ n; s& t8 ?
- E8 H: R# e5 l9 d+ ]- c" | return true;
, H# @3 i. Q4 @& o/ P' y O) k6 P5 T
. h% p" X/ ?& Z: b }4 y4 N* f9 _9 W0 R" m) L
E! g8 ]3 L" ~0 w# H+ L }
9 _& p- e2 t0 o% E8 s; J! @# l- l# H
}% \5 N4 e: D( n' T, I
. b2 j3 }9 {4 O( f% c
return false;- V4 N3 l, X: Q, J& O
' S3 z6 @( V0 D2 |5 F& a/ d2 b
}
6 s$ o) }- P/ I$ t0 {
0 O, T' G; r& P( {) Mprivate boolean isValid(char[][] board, String word, int start, int end, int standard, boolean isHorizontal) {! c4 D- C; |2 |9 H! e3 `' Z
9 x) P6 Q3 O8 Z( U! w // 水平放置, standard代表行, 固定不动
B/ T+ q6 G" F D2 O# a1 B, T+ J
) H8 H5 [, i3 N if (isHorizontal) {6 j- M1 m/ n3 W3 b% C3 J1 E' Z* j8 q
( [5 J! e! E0 r6 W8 L
if (end > board[0].length - 1) {
4 y5 P' F1 [2 s9 ~1 \1 U* `: T4 V, L) H# ?
return false;
! w8 @) A( p3 O' _$ m/ b; { H$ U R. P- ^
}$ E' G9 A% o$ ?1 j2 H% f
/ F/ N3 X1 ]! l- ~: P2 H8 x // 如果左边界不越界,检查左边界的元素是否合法
! a/ \. W+ s; G4 w7 I( o( b U' C
, i/ u( W+ v0 A if (start - 1 >= 0 && (board[standard][start - 1] == ' ' || Character.isLetter(board[standard][start - 1]))) {
* C+ D. n2 G7 H+ e; z8 H
( G. @ e$ ?6 I( A return false;
1 f( h. o& O5 g( K3 L9 L* I- G: H$ m0 X
}
, T# M, r. W, {7 L. U X0 y% s8 r
6 ]7 y) H( c2 P5 Z // 如果右边界不越界,检查右边界的元素是否合法3 @0 r! r# S0 d# i- s
. r2 V( d+ K1 G
if (end + 1 < board[0].length && (board[standard][end + 1] == ' ' || Character.isLetter(board[standard][end + 1]))) {
; e' N1 J% f5 `8 D% F4 Z; a
- y) U; n! x# G. F return false;2 T$ Z9 H" `! ^
$ m) [% d4 L$ x* S# k }
" d0 I. ^- C0 Q, }7 [( m& ~- ]8 [& u. k
// 至此,它的位置已确认是合法的了
1 O2 X1 ^; r& L) s7 b% p4 r. j9 Z, X5 ^. ~0 B: F+ t0 ]- V
// 接下来,只需要判断 (standard, start) ~ (standard, end) 这个区间 "是否有障碍'#'
) s0 ^; y0 Z: O$ A7 X3 U
) d3 X7 v* ^: B: A3 L, G3 [7 P // 正反都需要判断) `9 ^3 u( d5 f$ _
. c- J! j" O; T9 N5 G# b! v return check(board, word, start, end, standard, true, false) || check(board, word, start, end, standard, true, true);
* Q/ _; S1 c4 P% p9 s9 B/ I5 Y* t- _
}+ t; P7 f: K/ N3 `1 ^ T
2 U: T E3 y; }) S! z6 C" t. I4 n // 垂直放置,standard 代表列, 固定, S& @" B! D6 Q8 e5 @6 ]& h
1 U5 Y% c) H8 r4 V4 o) J" f else {
# \# O5 X, `6 u. Y
- O( X3 ~ X6 q if (end > board.length - 1) {4 _7 ~3 `% |& c+ K: Q( K
' M. Q1 `$ U& O$ P( z$ P) t
return false;% Y d5 X, k2 |( y, l$ r
* Y3 _6 H. O; P6 h, d. e }
+ k. h1 ], s m( c/ p0 q
8 x# d% w' x3 T9 L# \/ z // 如果上边界不越界,检查上边界的元素是否合法
$ l1 `" h; z: O- u- E0 V' x5 C3 M0 O+ Y( l( _$ k0 }
if (start - 1 >= 0 && (board[start - 1][standard] == ' ' || Character.isLetter(board[start - 1][standard]))) {) B2 ^0 _1 Q& Z0 q2 W3 `( F* d7 y
" u) O0 A; N3 R, E% }
return false;6 P/ H, b5 w# ~3 o8 A* N8 z' c
% v/ }/ @0 J/ {# `% h }
$ Y) x8 s9 ~# c1 B. `, g& T# _3 S5 A* a$ I4 z: f6 N4 b# p
// 如果下边界不越界,检查下边界的元素是否合法: F/ x/ a; |7 n/ ~
, |* p6 O) h h% B2 h8 [ if (end + 1 < board.length && (board[end + 1][standard] == ' ' || Character.isLetter(board[end + 1][standard]))) {' ]/ z7 C! D4 ?8 v5 F7 j, X
8 a1 |4 o$ Q3 | return false;
' L3 k4 O. K. F: W4 M+ }" B- m+ n9 y+ s* y4 q- E5 o. I
}0 C" W/ ]: M( c* y! s$ `
1 e1 h5 `+ J s* Y" t* A2 A // 至此,它的位置已确认是合法的了9 ]( |2 \4 G- t* o' ]& }
0 H: p: T; f7 g/ d x4 o // 接下来,只需要判断 (start, standard) ~ (end, standard) 这个区间 "是否有障碍'#'; P! s0 T8 s- e0 j. |6 ]$ { E
* Y5 O& j! d1 A. I7 y& M
// 正反都要判断' r. T; [# Z1 |& K; i/ @
$ K9 }* \$ r6 ]. O" e% S' R3 Y
return check(board, word, start, end, standard, false, false) || check(board, word, start, end, standard, false, true);! @6 v* {$ C1 s. I
* X. i ~/ d& K" R# M8 k
}
0 P; |* U7 D$ Z: ?
, E& ]% D/ b& I" R _$ v+ A8 P& `2 V- a }$ l) ~9 V. J+ h5 _
* I* _' x9 o+ rprivate boolean check(char[][] board, String word, int start, int end, int standard, boolean isHorizontal, boolean isReversed) {" E) m. k7 u* J0 q1 o3 T2 E
6 V# l5 l0 R8 P, j
if (isHorizontal) {: W1 G/ e* ^5 C8 |3 X
6 K, m% Y+ [, P: }% V1 Q- l6 L
// 正向模拟
8 @( U! F7 u: e3 B! a
! b$ J" _/ Q; q6 h! {4 R if (!isReversed) {. M( ~& k) r/ A
9 n' {4 N; I1 X$ w for (int i = start; i <= end; i++) {
# M! {% |, N4 L6 {7 E
: ^! C/ P& M- o- c- s. I+ c2 Y if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(i - start))) {
. M& s; p' y+ T) Z! | ], o- `
, \+ F3 w$ t$ ]% n return false;2 ^6 g% M }, l$ y
; w* z |1 B/ A I- L
}( \) ^* ]$ w; Q2 W
! z0 J$ j+ e& G- J# ]! o5 { }: t9 j6 A& `8 K; `% J
' X& y$ ?' [ r
}( i$ l( ?; c$ o0 U" }# _# H9 O$ F8 O
, z8 k. v4 \- L% T
// 反向模拟$ ?; C5 z+ o$ {4 l$ v3 |
9 n/ U$ X5 A/ f) z3 D; p% X. r
else {
' i" p3 |. h! u& V' _/ ?% Z" ~: R
# s6 `1 \1 Y) D8 t for (int i = end; i >= start; i--) {
. `& X- e+ {0 r# e0 M5 T% A& k; F: V( V7 X1 o# z6 E, o8 M. {: G4 I
if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(end - i))) {0 {2 v$ l' d" Y6 t+ x7 t0 o: B
( C8 K% G5 J" q6 D* l
return false;
/ K4 n1 A6 D4 d, y) K" S3 K* w
4 {/ C3 L$ `5 J }
8 s6 _$ \* ~$ Q/ B: J# j/ h3 u
( v0 c8 q: ]8 H4 D# i4 d- i0 ^( F }
+ D6 _! D% a6 [/ ^7 M
. }: H+ \" m; u/ F; Y }
# t0 Z& r- s8 `4 ^
4 `1 p1 Y0 I: D5 a8 ?1 X$ u }
! f: Z4 L) M: R
; i, F C8 v6 k+ \ else {% U2 c) f8 M0 `3 C1 B& b% f
" ?4 r* ?4 c$ r5 l // 正向模拟
& ~3 j9 l: A5 O2 e6 H
5 o" [5 d+ }/ b# C2 v( c if (!isReversed) {, A) d0 ]% \& X! u9 w" a
: _" P* Z# }2 z: n# w0 ] for (int i = start; i <= end; i++) {. m2 P c. U. i! f, Q2 d" w$ Q3 u
+ t8 {" Z; |0 |+ J# ` if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(i - start))) {
% W/ H$ l5 Q: W& i5 A' F5 P( W e. e6 {- D' ^' c# H7 u$ C1 i
return false;
7 a9 C$ P! a% c1 h" V9 W" h( D8 q
8 \0 u& R1 S% S2 T% ~" ]; ^ }( B9 `5 U1 k. y3 Z2 ^
' H! T5 s5 v$ O0 Q* z% @! x }- M: O5 m6 E2 \/ W: J
% m& J) t2 d8 e5 o2 b
}0 p0 k/ H: o/ a" R3 k
! U8 Z$ L k2 y |+ k# E; h/ | // 反向模拟8 u: U q8 ~7 W% W: o L
0 `4 l+ I% J7 M) o
else {
: l4 O! G+ t6 D" x
$ H2 |# \* v* C0 n4 O: z6 F: A/ | for (int i = end; i >= start; i--) {, e6 V h' F3 J |6 M* p
3 i# w( O4 q3 g% X% ^: ] if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(end - i))) {
3 f. n) @: t9 n+ h% r) ^1 [% B3 u4 Z" \. U6 a
return false;* E' N$ ^/ P# }- |! c+ |
* p, H' j# V8 T6 b( v, a
}
% F1 ^" T% y; Z1 d) Q) _% a$ y& A( ^! @9 W
}: F% _5 F& {" i5 L- e9 s i
" w2 l8 J b2 A Q2 n4 B6 @! N" |- y }
+ v1 x" x0 N7 o( ]
P8 R! u; U4 h K) O2 D) O }
" t! R, C) ?* V& P/ @9 _& g6 Q; ~$ C; I" @4 m ~" x; J( m. i7 S! T, l1 X
return true;# ]" [- U8 R8 b( z4 R) M
* `. a1 S0 C! m& K. W
}
, g* Y) v5 l. U6 a+ y
* x- }7 d% { r9 D}
. ^; D' t: Z* }' o+ v! k
+ N) r) u9 E! I# J0 U' H4 D+ ?6 [6 ]$ i
【 NO.4 解出数学表达式的学生分数】+ @$ s* p: j: p l. o
" d% ^7 _3 ` j& e
解题思路. x4 t* o2 g3 _/ T, o( z$ f* b
( ~( F& K3 U! }8 s# G4 G首先理一理总体的思路,我们需要做的事情有:0 L' c( |+ ]# T4 s/ k" M; K- Q
9 q; X7 ~% G3 }4 _$ c& |3 ~ m& W9 s! T+ W- o
1. 求出表达式的正确值:Stack的方式解决" V* N, ?) t7 `
2. 求出表达式所有可能的值:区间型动态规划解决0 O3 x1 Y( n# U5 ^' p! N+ ?
3. 计算学生的得分:计分即可9 R4 z, Z1 T! C1 ?/ p
代码展示! F& _% |2 U @* I4 t' @! J
- \* d* x2 H$ t4 B1 T. epublic int scoreOfStudents(String s, int[] answers) {. @/ f# D5 G. H2 `5 }
: W+ w8 S9 J( s& O% G) M
int[] count = new int[1024];
; U% F$ \" h3 Z* W8 |( O) e2 s2 v A! w* ?2 y; Q. A
for (int ans : answers) {# _/ A2 \! j* N
8 q' A! y# Q! [0 g% `- k9 C2 `
count[ans]++; y; [) f# N2 g. V) _
$ I' c% g# J7 U! J }
5 l2 x Y0 @4 s8 m# v
( A7 j. T7 l' |% Y Stack<Integer> stack = new Stack<>();# Z+ I7 A( q' Z' }# ]) V. M
% ~3 e+ K) q4 J1 \9 b" m- k+ x stack.push(s.charAt(0) - '0');* Q! j% n' p7 D; f p& _
2 X" F- h% l3 O$ Z0 ]
for (int i = 1; i < s.length(); i += 2) {
0 x; Y9 w) I: }9 B7 Y. g- V
+ p4 X" G6 t8 o* b+ Y! s7 i // 加法暂时不做,存在栈顶& m7 s9 x8 x1 y/ x: K
% @0 G; H7 H$ d$ L# F
if (s.charAt(i) == '+') {8 S1 t+ W# B1 }0 B* L: i
5 }7 s9 w) x. ?- ^1 D
stack.push(s.charAt(i + 1) - '0');
# }6 o0 x8 Y# j( {
/ ?7 p; A# F* q1 h5 S+ q; ~ }8 s9 ]" H7 _# v; _. ^! `
0 g9 |3 ?! f& T% ?. u
// 乘法直接运算% d4 |2 J1 Q% q
* p& N+ `! L9 H$ D k% } else {6 Z$ @6 r5 u2 a% |
/ ?, n/ U% _3 E: q; R3 b i D stack.push(stack.pop() * (s.charAt(i + 1) - '0'));. D! t* k! n9 l" Y+ T/ M& O
# r9 E2 A1 M6 t. W
}
5 X$ j# Y5 Z- O* N& q9 r2 r/ m0 V
}# Z- ~; f" ^* [
6 k9 b T- F) A) U+ n a4 W; | int rihgtAns = 0;
+ U- e! ^5 G1 A+ c. q! C4 w, x% W5 ]6 [' ~
while (stack.size() > 0) {
; O# G8 s$ }2 O) i9 Y- M7 A$ I+ e0 Y* K
rihgtAns += stack.pop();
. w I0 e% o$ u5 E9 J1 u
. U+ b4 n* b* Q0 V }9 \1 L) _& s% u$ o
+ q H" Q5 i' h3 W9 v4 g
// 计算正确的人数积分
/ X. ~* H& N9 \* O* j% e4 R2 {! v# L# z( W9 t9 E
int res = count[rihgtAns] * 5;! H0 j; ~/ W* ]
' K% H$ q- C8 ^7 K+ p9 o+ p
W7 F; `4 t, s; L y. ]4 f
+ d7 C# H% D1 m7 j5 P# J G9 A // 枚举所有可能的计算结果
4 e4 s' t3 i3 g/ C D9 _
& H" Z: R8 ? O int n = s.length();3 V7 ]# j1 `" _1 Q- S# I/ [
; V! R" Y4 ^! @
Set<Integer>[][] dp = new Set[n + 2][n + 2];1 t8 F" D5 x9 d& s4 I
+ S$ \1 J3 Z+ u" R for (int i = 0; i < n + 2; i++) {" n k) \/ M3 g/ m q
& |" ?+ W! [0 G& i6 s8 ~7 o
for (int j = 0; j < n + 2; j++) {& N$ Y6 M3 R% ]/ y) ?9 H
- t' [( s3 f+ s
dp[i][j] = new HashSet<>();' F C! O* c0 N6 c! [
9 I7 L' i6 P7 B6 J( [5 n
}
4 h' ]! G5 r4 g* W; @
3 ]4 U* E4 {2 ^- s5 e+ o0 X- g }1 q+ C3 a6 D* R1 `# `/ p, I8 r6 s* O; F
. i; c2 [- A0 C; L! n
for (int j = 0; j < n; j += 2) {1 m N1 e% ], M" S' R! r1 E
5 p* ^ t0 _" P9 x& g2 Z
dp[j][j].add(s.charAt(j) - '0');5 ~9 N. d& l$ w7 E0 W
" h; o$ E- k8 X- e6 }+ Q
}2 h7 B& K. a1 w s
: k& C6 b2 ?: R5 X( P: j
// 区间型动态规划
6 E" [: a1 V8 b% s$ _1 t9 F0 a: `& J/ |: {/ d
for (int len = 2; len < n; len++) {5 W7 ^+ k. e) p# _+ y; [+ a: a
$ O" a1 F( [) u% O! W // 左端点 i
5 F8 D% S: J) s& ^$ _' \8 Y( I- p4 Z$ T3 A
for (int i = 0; i + len < n; i += 2) {7 F. h- t# s2 T/ o
4 h0 h y& r& w: B" `! U
// 枚举左半部分的长度
# u9 N* l% ]: ]- p
4 y4 V8 u0 v- { for (int leftLen = 0; leftLen < len; leftLen += 2) {( H* J1 q* S, n/ ^0 T* S; H
6 H' W+ e+ |. Y$ [
// left 表示左半部分的值5 b+ `% c0 D2 i$ G- b. b" x
; x, d/ T: h4 }+ M // right 表示右半部分的值
, g i' \; v$ ~% Q+ m+ r1 k5 g% x* ^
. Y, e( o: a# h7 w1 j# m/ { for (int left : dp[i][i + leftLen]) {8 Z/ ?9 v( K( n4 c' b6 ~
+ [+ G2 {( [1 v E; J
for (int right : dp[i + leftLen + 2][i + len]) { {- b& G9 p2 d, h( K: N" S# [
& B! X, Q, R7 h if (s.charAt(i + leftLen + 1) == '+') {
$ b' [8 x8 ~; r8 D3 t* ?8 _4 X8 E3 L/ W+ v, R1 d% B
if (left + right <= 1000) {
( y. E1 H4 c& n) \ a; o0 W9 i) K! Z
9 T. j# l, l1 _3 N dp[i][i + len].add(left + right);
" L7 L$ j# R T% ?+ W2 @$ c/ P6 {4 }+ o) D1 e, w
}9 @, u+ p5 |9 }; Y
( W- [3 V- ~1 S! A7 b0 z } else {
( m* I& ~& I/ \/ J5 L( G0 W' l1 B2 c4 f, R
if (left * right <= 1000) {- c: ?( `" m: d' h! u
1 _2 `; z' o- d
dp[i][i + len].add(left * right);. r2 d( V- a* d* \% Y" ?* \/ p) q$ i
D: u, }- h5 F* A4 o2 U }$ ?0 q1 d5 m7 R
/ Y/ |0 A3 l* X2 [/ e, m! \$ O- A
}$ o7 c# r# z( m% C7 U3 Z
7 S- B% Z9 ?. }3 e6 T
}
5 O2 `( y {% P! |8 r8 g
6 c" a/ j# j& X; z }
! C8 q) ]8 m) v1 ?. ^& A) e. U- r) P7 @$ W% |& \) `7 I' {+ h
}
+ B7 S1 N+ }3 Q ?* ?: j
- O6 g7 L# M- R6 ?4 y- g }2 O2 s9 }! `7 {1 s+ M) o. o2 F# R. p
1 b; Q2 i# q. h) D }
: Y5 N, N/ q1 T( C
1 }( Y. o5 v8 k: B. O9 X5 h8 g. U1 [- y
" C7 G2 M2 I9 s; O7 C
for (int points : dp[0][n - 1]) {# s6 p1 E( V+ G- z4 F
- @1 Z. h" ?8 P# k8 @ | if (points != rihgtAns) {
! k) k3 z: l4 `) ^" p7 m( a4 j1 f6 k% U* J% u4 h/ g6 y* P4 \
res += 2 * count[points];
/ u4 y) n c5 o6 B$ P3 V/ _& }+ m( P! X, e" t6 I5 s0 I
}
( q' `( r8 n% ?1 l$ i" a3 D/ ] j5 h- q2 }4 G
}8 y8 R* o) r; m; Q) S( `0 l8 S. s$ d
2 r9 A4 ]7 M& Q
return res;
% @! h% K" v6 c8 | H$ X. q% l' n. _- b6 y/ o% X9 i0 j
} |