using
System;
using
System.Collections.Generic;
class
GFG {
static
void
isReachable(List<List<
int
> > A,
int
N,
int
X)
{
int
[,,]dp=
new
int
[N,N,2];
for
(
int
i=0; i<N; i++)
{
for
(
int
j=0; j<N; j++)
{
for
(
int
k=0; k<2; k++)
dp[i,j,k]=0;
}
}
dp[0,0,0] = A[0][0];
dp[0,0,1] = A[0][0];
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < N; j++) {
if
(i == 0 && j == 0)
continue
;
if
(i == 0) {
dp[i,j,0] = dp[i,j - 1,0] + A[i][j - 1];
dp[i,j,1] = dp[i,j - 1,1] + A[i][j - 1];
}
else
if
(j == 0) {
dp[i,j,0] = dp[i - 1,j,0] + A[i - 1][j];
dp[i,j,1] = dp[i - 1,j,1] + A[i - 1][j];
}
else
{
dp[i,j,0]
= Math.Min(dp[i - 1,j,0] + A[i - 1][j],
dp[i,j - 1,0] + A[i][j - 1]);
dp[i,j,1]
= Math.Max(dp[i - 1,j,1] + A[i - 1][j],
dp[i,j - 1,1] + A[i][j - 1]);
}
}
}
int
minimumPathSum = dp[N - 1,N - 1,0];
int
maximumPathSum = dp[N - 1,N - 1,1];
int
numberOfCells = 2 * N - 1;
if
(numberOfCells % 2 == X % 2 && minimumPathSum <= X
&& maximumPathSum >= X)
Console.Write(
"Yes\n"
);
else
Console.Write(
"No\n"
);
}
public
static
void
Main()
{
List<List<
int
> > A=
new
List<List<
int
>>();
A.Add(
new
List<
int
>{ 1, 1, 1, 1 });
A.Add(
new
List<
int
>{ -1, 1, -1, -1 });
A.Add(
new
List<
int
>{ -1, 1, -1, 1 });
A.Add(
new
List<
int
>{ -1, -1, 1, 1 });
int
N = A.Count;
int
X = 3;
isReachable(A, N, X);
List<List<
int
> > A1=
new
List<List<
int
>>();
A1.Add(
new
List<
int
> { 1, 1, 1 });
A1.Add(
new
List<
int
>{ 1, 1, 1 });
A1.Add(
new
List<
int
>{ 1, 1, 1 });
int
N1 = A1.Count;
int
X1 = 4;
isReachable(A1, N1, X1);
}
}