using
System;
using
System.Collections.Generic;
class
GFG {
static
int
[, ] dp =
new
int
[501, 20001];
static
int
recur(
int
i,
int
j,
int
T, List<
int
> A)
{
if
(i == A.Count) {
if
(j == T)
return
1;
else
return
0;
}
if
(dp[i, j + 10000] != -1)
return
dp[i, j + 10000];
int
ans = 0;
ans = Math.Max(ans, recur(i + 1, j + A[i], T, A));
ans = Math.Max(ans, recur(i + 1, j - A[i], T, A));
return
dp[i, j + 10000] = ans;
}
static
void
isReachable(
int
[] A,
int
N,
int
X,
int
Y)
{
List<
int
> A1 =
new
List<
int
>();
List<
int
> A2 =
new
List<
int
>();
for
(
int
i = 0; i < N; i++)
{
if
(i % 2 == 0)
A1.Add(A[i]);
else
A2.Add(A[i]);
}
for
(
int
i = 0; i < 501; i++)
for
(
int
j = 0; j < 20001; j++)
dp[i, j] = -1;
int
isPossibleX = recur(0, 0, X, A1);
for
(
int
i = 0; i < 501; i++)
for
(
int
j = 0; j < 20001; j++)
dp[i, j] = -1;
int
isPossibleY = recur(0, 0, Y, A2);
if
(isPossibleX == 1 && isPossibleY == 1)
Console.WriteLine(
"Yes"
);
else
Console.WriteLine(
"No"
);
}
static
void
Main(
string
[] args)
{
int
[] A = { 2, 1, 3 };
int
N = A.Length;
int
X = -1, Y = 1;
isReachable(A, N, X, Y);
int
[] A1 = { 1, 2, 3, 4 };
int
N1 = A1.Length;
int
X1 = 5, Y1 = 5;
isReachable(A1, N1, X1, Y1);
}
}