nang cap may tinh
unknown
plain_text
2 years ago
2.6 kB
5
Indexable
package practise; import java.util.Scanner; public class nang_cap_may_tinh { static int n_equip, n_sale, n_use, ans; static int[] price_CT, price_sale, usage, bought; static boolean[] visit; static int[][] sales; // private static boolean check() { // for(int i = 0; i < n_use; i++) { // if(bought[i] == -1) return false; // } // return true; // } private static void backtrack(int sale, int cnt, int price) { if(cnt == n_use) { ans = ans > price ? price : ans; return; } if(sale == n_sale) { int tmp = 0; for(int i = 0; i < n_use; i++) { if(bought[i] == -1) { tmp += price_CT[usage[i]]; } } ans = ans > tmp + price ? tmp + price : ans; return; } visit[sale] = true; int sum = 0, tmp = 0; for(int i = 0; i < n_use; i++) { if(bought[i] == -1 && sales[sale][usage[i]] != 0) { bought[i] = cnt; tmp++; sum += price_CT[usage[i]]; } } if(tmp != 0) { if(sum > price_sale[sale]) { backtrack(sale + 1, cnt + tmp, price + price_sale[sale]); } else backtrack(sale + 1, cnt + tmp, price + sum); for(int i = 0; i < n_use; i++) { if(bought[i] == cnt) bought[i] = -1; } } else backtrack(sale + 1, cnt, price); visit[sale] = false; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int testcase = sc.nextInt(); for(int tc = 1; tc <= testcase; tc++) { n_equip = sc.nextInt() + 1; price_CT = new int[n_equip]; for(int i = 1; i < n_equip; i++) { price_CT[i] = sc.nextInt(); } n_sale = sc.nextInt() + 1; sales = new int[n_sale][n_equip]; price_sale = new int[n_sale]; int equip, price, tmp; for(int i = 1; i < n_sale; i++) { price = sc.nextInt(); price_sale[i] = price; equip = sc.nextInt(); for(int j = 0; j < equip; j++) { tmp = sc.nextInt(); sales[i][tmp] = price; } } n_use = sc.nextInt(); usage = new int[n_use]; bought = new int[n_use]; for(int i = 0; i < n_use; i++) { usage[i] = sc.nextInt(); bought[i] = -1; } visit = new boolean[n_sale]; ans = Integer.MAX_VALUE; if(n_sale == 1) { ans = 0; for(int i = 0; i < n_use; i++) { ans += price_CT[usage[i]]; } } else { for(int i = 1; i < n_sale; i++) { backtrack(i, 0, 0); } } // backtrack(1, 0, 0); System.out.println("#" + tc + " " + ans); // return; } } }
Editor is loading...