Untitled
package practice; import java.io.FileInputStream; import java.util.Scanner; public class hugovenha { static boolean[][] check; static int[][] soquantaimoilan,coppy; static int N, min, cost; static int[][] cong; static void try1(int index, int soquan) { if (cost > min) { return; } if (index == N) { if (min > cost) { min = cost; } return; } for (int i = 0; i < 3; i++) { if (i == 0) { cost += cong[index][1]; try1(index + 1, soquan); cost -= cong[index][1]; } if (i == 1) { cost += cong[index][1] * 2; soquantaimoilan[index][1] = cong[index][1]; soquantaimoilan[index][0] = 0; try1(index + 1, soquan + cong[index][0]); cost -= cong[index][1] * 2; soquantaimoilan[index][1] = 0; soquantaimoilan[index][0] = 0; } if(i ==2) { int soquanthucte = 0; for(int i1 =0 ;i1<N;i1++) { if(soquantaimoilan[i1][0] <3) { soquanthucte += soquantaimoilan[i1][1]; } } //soquan = soquanthucte; int chien = cong[index][1]; if(soquanthucte>= chien) { for(int i2 = 0;i2<N;i2++) { coppy[i2][0] = soquantaimoilan[i2][0]; coppy[i2][1] = soquantaimoilan[i2][1]; } for(int i2 = 0;i2<N;i2++) { if(soquantaimoilan[i2][0] <3) { if(soquantaimoilan[i2][1] < chien) { chien -= soquantaimoilan[i2][1]; soquantaimoilan[i2][1] = 0; continue; } else { soquantaimoilan[i2][1] -= chien; break; } } } for(int i2 = 0;i2<N;i2++) { if(soquantaimoilan[i2][1] > 0) { soquantaimoilan[i2][0]++; } } try1(index+1, soquanthucte); for(int i2 = 0;i2<N;i2++) { soquantaimoilan[i2][0]= coppy[i2][0] ; soquantaimoilan[i2][1]=coppy[i2][1] ; } } else { break; } } } } public static void main(String[] args) throws Exception { System.setIn(new FileInputStream("src/practice/input.txt")); Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); for (int t = 1; t <= T; t++) { N = scanner.nextInt(); cong = new int[N][2]; soquantaimoilan = new int[N][2]; coppy = new int[N][2]; for (int i = 0; i < N; i++) { cong[i][0] = scanner.nextInt(); cong[i][1] = scanner.nextInt(); } min = Integer.MAX_VALUE; cost = 0; try1(0, 0); System.out.println("#"+t+" "+min); } } }
Leave a Comment