public void solve() throws Exception { int n = in.nextInt(); int[] a = new int[n]; int sum = 0; for (int i = 0; i < n; i++) { a[i] = in.nextInt(); sum += a[i]; } sum /= 2; boolean[] dp = new boolean[sum + 1]; dp[0] = true; for (int tmp : a) { for (int i = sum; i >= tmp; i--) { if (dp[i - tmp]) { dp[i] = true; } } } String ans = dp[sum] ? "YES" : "NO"; out.println(ans); }
public void solve() throws Exception { n = in.nextInt(); m = in.nextInt(); graph = new char[n][m]; cracked = new boolean[n][m]; for (int i = 0; i < n; i++) { graph[i] = in.next().trim().toCharArray(); } sx = in.nextInt() - 1; sy = in.nextInt() - 1; gx = in.nextInt() - 1; gy = in.nextInt() - 1; cracked[sx][sy] = true; if (sx == gx && sy == gy) { if (graph[sx][sy] == 'X') {} } int scount = 0; for (int i = 0; i < 4; i++) { int nx = sx + dx[i]; int ny = sy + dy[i]; if (nx < 0 || nx > n - 1 || ny < 0 || ny > m - 1) { continue; } if (graph[nx][ny] == '.') { scount++; } } int gcount = 0; for (int i = 0; i < 4; i++) { int nx = gx + dx[i]; int ny = gy + dy[i]; if (nx < 0 || nx > n - 1 || ny < 0 || ny > m - 1) { continue; } if (graph[nx][ny] == '.') { gcount++; } } boolean isNeighbors = false; for (int i = 0; i < 4 && !isNeighbors; i++) { int nx = sx + dx[i]; int ny = sy + dy[i]; if (nx < 0 || nx > n - 1 || ny < 0 || ny > m - 1) { continue; } if (nx == gx && ny == gy) { isNeighbors = true; } } if (sx == gx && sy == gy) { if (graph[sx][sy] == 'X') { if (scount >= 1) { out.println("YES"); } else { out.println("NO"); } } else { if (scount >= 2) { out.println("YES"); } else { out.println("NO"); } } } else if (isNeighbors) { if (graph[gx][gy] == 'X') { out.println("YES"); } else { if (gcount >= 1) { out.println("YES"); } else { out.println("NO"); } } } else if (dfs(sx, sy)) { if (graph[gx][gy] == 'X') { out.println("YES"); } else { if (gcount >= 2) { out.println("YES"); } else { out.println("NO"); } } } else { out.println("NO"); } }