Untitled

 avatar
unknown
plain_text
a year ago
1.9 kB
6
Indexable
import java.util.Scanner;

public class Main {
    static int companies, mines, ANS;

    static int MIN(int x, int y) {
        return (x >= y) ? y : x;
    }

    static int MAX(int x, int y) {
        return (x >= y) ? x : y;
    }

    static void calculateOilMines(int i, int[] oilMines, boolean[] visited, int minV, int maxV, int sum,
                                  int nodes, int companies, int mines) {
        // Base Case
        if (visited[i]) {
            int newMin = MIN(sum, minV);
            int newMax = MAX(sum, maxV);

            if (nodes == companies - 1) {
                ANS = Math.min(ANS, newMax - newMin);
            }
            return;
        }

        // Main Case
        visited[i] = true;
        int j = (i + 1) % mines;

        calculateOilMines(j, oilMines, visited, minV, maxV, sum + oilMines[i], nodes, companies, mines);

        int newMin = MIN(sum, minV);
        int newMax = MAX(sum, maxV);

        calculateOilMines(j, oilMines, visited, newMin, newMax, oilMines[i], nodes + 1, companies, mines);

        visited[i] = false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            companies = sc.nextInt();
            mines = sc.nextInt();
            int[] oilMines = new int[mines];
            boolean[] visited = new boolean[mines];

            for (int i = 0; i < mines; i++) {
                oilMines[i] = sc.nextInt();
                visited[i] = false;
            }

            ANS = Integer.MAX_VALUE;
            for (int i = 0; i < mines; i++) {
                calculateOilMines(i, oilMines, visited, Integer.MAX_VALUE, Integer.MIN_VALUE, 0, 0, companies, mines);
            }

            System.out.println(ANS);
        }
        sc.close();
    }
}
Editor is loading...
Leave a Comment