import java.util.Arrays;
public class NaplnanieLietadla {
/**
* Pole, v ktorom generujeme postupnost
*/
private int[] rozdelenie;
private int[] ceny;
private int pocetLietadiel;
private int[] vyherneRozdelenie;
private int minimalnyRozdiel = Integer.MAX_VALUE;
private void porovnaj() {
int[] aktualneCeny = new int[pocetLietadiel];
for (int i = 0; i < rozdelenie.length; i++) {
aktualneCeny[rozdelenie[i]] += ceny[i];
}
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < aktualneCeny.length; i++) {
if (aktualneCeny[i] < min)
min = aktualneCeny[i];
if (aktualneCeny[i] > max)
max = aktualneCeny[i];
}
int rozdiel = max - min;
if (rozdiel < minimalnyRozdiel) {
vyherneRozdelenie = rozdelenie.clone();
minimalnyRozdiel = rozdiel;
}
}
/**
* Generuje variacie s opakovanim v podpoli pocnuc indexom odIndexu
*/
private void generuj(int odIndexu) {
if (odIndexu == rozdelenie.length) {
porovnaj();
return;
}
for (int i = 0; i < pocetLietadiel; i++) {
rozdelenie[odIndexu] = i;
generuj(odIndexu + 1);
}
}
/**
* Nastartuje generovanie
*/
public void najdiRozdelenie() {
generuj(0);
System.out.println(Arrays.toString(vyherneRozdelenie));
System.out.println(minimalnyRozdiel);
}
public NaplnanieLietadla(int pocetLietadiel, int[] ceny) {
this.pocetLietadiel = pocetLietadiel;
this.ceny = ceny;
this.rozdelenie = new int[ceny.length];
}
public static void main(String[] args) {
NaplnanieLietadla z = new NaplnanieLietadla(9, new int[] { 2, 3, 19, 29, 53, 97, 113, 157,
211 });
z.najdiRozdelenie();
}
}