Untitled
unknown
plain_text
2 years ago
3.3 kB
3
Indexable
skyforce import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class SkyForce { static int N, map[][], ans, visit[][]; static int dx[] = { -1, -1, -1 }; static int dy[] = { -1, 0, 1 }; public static void main(String[] args) { try { System.setIn(new FileInputStream("SkyForce")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for (int tc = 1; tc <= T; tc++) { N = sc.nextInt(); map = new int[N][5]; for (int i = 0; i < N; i++) { for (int j = 0; j < 5; j++) { map[i][j] = sc.nextInt(); } } visit = new int[N][5]; ans = -1; for (int i = 0; i <= 5; i++)// chi tha bom trong doan nay { BT(N, 2, 0, i); // truyen bom i } System.out.println("Case #" + tc); System.out.println(ans); } } public static void BT(int x, int y, int xu, int bom) { // int bom: gsu vi // tri tha bom if (x <= 0) { // if (xu < 0) // return; // else { ans = Math.max(ans, xu); return; // } } if (xu < 0) return; for (int i = 0; i < 3; i++) { int xx = x + dx[i]; int yy = y + dy[i]; if (xx >= 0 && xx < N && yy >= 0 && yy < 5) { if (map[xx][yy] == 0) BT(xx, yy, xu, bom); else if (map[xx][yy] == 1) BT(xx, yy, xu + 1, bom); else { if (xx >= bom && xx < bom + 5) // gia su tha bom tai xx // >=bom! BT(xx, yy, xu, bom); else // k tha bom tru quan dich BT(xx, yy, xu - 1, bom); } } } } } // cach 2 package LuyenDe; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class Skyforce { static int dx[] = { -1, -1, -1 }; static int dy[] = { -1, 0, 1 }; public static int N, M, ans; public static int[][] board, visit; public static void main(String[] args) { try { System.setIn(new FileInputStream("skyForce")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for (int tc = 0; tc < T; tc++) { N = sc.nextInt(); board = new int[N+1][5]; for (int i = 0; i < N; i++) { for (int j = 0; j < 5; j++) { board[i][j] = sc.nextInt(); } } ans = 0; visit = new int[N][5]; // boolean hasBom = true; backtrack(N, 2, true, 0, 0); System.out.println(ans); } } public static void backtrack(int x, int y, boolean bom, int sum, int mana) { if (x <= 0) { ans = Math.max(ans, sum); return; } if (y > 4 || y < 0) return; if (board[x][y] == 1) ++sum ; else if (board[x][y] == 2 && mana <= 0) { if (sum > 0) --sum; else { return;// over game } } mana--; for (int i = 0; i < 3; i++) { int xx = x + dx[i]; int yy = y + dy[i]; if (xx >= 0 && xx < N && yy >= 0 && yy < 5) { if (visit[xx][yy] == 0) { visit[xx][yy] = 1; backtrack(xx, yy, true, sum, mana); if (bom) { backtrack(xx, yy, false, sum, 5); } visit[xx][yy] = 0; } } } } }
Editor is loading...