private Komponenta[] BubbleSort(Komponenta[] array)
        {
            Komponenta temp = null;

            for (int i = 0; i < array.Length; i++)
            {
                for (int sort = 0; sort < array.Length - 1; sort++)
                {
                    if (array[sort].cijena < array[sort + 1].cijena)
                    {
                        temp            = array[sort + 1];
                        array[sort + 1] = array[sort];
                        array[sort]     = temp;
                    }
                }
            }
            return(array);
        }
        public void Calculate(Komponenta komp1, Komponenta komp2, Komponenta komp3, Komponenta komp4)
        {
            Komponenta[] komponente = { komp1, komp2, komp3, komp4 };
            komponente = BubbleSort(komponente);

            int[,] valueTable = new int[5, budget + 1];
            int[,] keepTable  = new int[5, budget + 1];

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < budget + 1; j++)
                {
                    if (i == 0)
                    {
                        valueTable[i, j] = 0;
                        keepTable[i, j]  = 0;
                    }
                    else
                    {
                        if (komponente[i - 1].cijena > j)
                        {
                            valueTable[i, j] = valueTable[i - 1, j];
                            keepTable[i, j]  = 0;
                        }
                        else
                        {
                            int diff = j - komponente[i - 1].cijena;
                            int add  = komponente[i - 1].vrijednost + valueTable[i - 1, diff];
                            if (add >= valueTable[i - 1, j])
                            {
                                valueTable[i, j] = add;
                                keepTable[i, j]  = 1;
                            }
                            else
                            {
                                valueTable[i, j] = valueTable[i - 1, j];
                                keepTable[i, j]  = 0;
                            }
                        }
                    }
                }
            }

            if (totalValue <= valueTable[4, budget])
            {
                List <Komponenta> tmp = new List <Komponenta>();
                int cost = 0;

                int i = 4, w = budget;
                while (i != 0)
                {
                    if (keepTable[i, w] == 1)
                    {
                        tmp.Add(komponente[i - 1]);
                        w -= komponente[i - 1].cijena;
                        i -= 1;
                    }
                    else
                    {
                        i -= 1;
                    }
                }

                foreach (Komponenta k in tmp)
                {
                    cost += k.cijena;
                }

                if (totalValue == valueTable[4, budget])
                {
                    if (cost < totalCost || bestChoice.Count == 0)
                    {
                        totalCost = cost;
                        bestChoice.Clear();
                        bestChoice = tmp;
                    }
                }
                else
                {
                    totalCost = cost;
                    bestChoice.Clear();
                    bestChoice = tmp;
                    totalValue = valueTable[4, budget];
                }
            }
        }