package dynProg.solvers;_x000D_
_x000D_
import dynProg.Solver;_x000D_
_x000D_
public class BottomUpSolver implements Solver{_x000D_
       _x000D_
        private int[][] matrix;_x000D_
        _x000D_
        public BottomUpSolver(){                _x000D_
        }_x000D_
       _x000D_
        public static void main(String[] args){_x000D_
                BottomUpSolver s = new BottomUpSolver();_x000D_
                s.solve(new int[]{3,5,7,9,11}, 17);_x000D_
        }_x000D_
       _x000D_
     _x000D_
        public boolean solve(int[] numbers, int sum){          _x000D_
                matrix = new int[numbers.length][sum];  _x000D_
                // Elke rij bijlangs gaan_x000D_
                //M(i,j)_x000D_
                //row == i_x000D_
                //answer == j_x000D_
                int totaal=0;_x000D_
                for(int p=0;p<numbers.length;p++){_x000D_
                        totaal += numbers[p];_x000D_
                }_x000D_
                for(int i = 0; i<numbers.length; i++){                  _x000D_
                        int somB = 0;_x000D_
                        for(int j = 0; j<=i; j++){      _x000D_
                                // Plaats de huidige_x000D_
                                // Als numbers j is 3 dan wordt er een 1 geplaatst op M(0,2)_x000D_
                                matrix[i][numbers[j]-1] = numbers[j];_x000D_
_x000D_
                                // De som uitvoeren_x000D_
                                // Zolang de som van B kleiner is dan 17 zal hij toegevoegd worden aan de matrix_x000D_
                                // Als {3,5} aan de beurt is wordt er dus 8 uitgerekend_x000D_
                                // Gekeken of het kleiner is dan 17_x000D_
                                // en vervolgens in dit geval op {1,7} geplaatst_x000D_
                                somB += numbers[j];    _x000D_
                                if(somB<=sum){                                  _x000D_
                                        matrix[i][somB - 1] = somB;_x000D_
                                }_x000D_
                                                               _x000D_
                                // De som van de vorige_x000D_
                                // Totaal is gelijk aan de som van B - het getal voor de huidige_x000D_
                                // Dit moet eigenlijk vaker om alle antwoorden te krijgen maar is op dit moment niet nodig om te doen_x000D_
                                if (j > 0)_x000D_
                                {_x000D_
                                        totaal = somB - numbers[j - 1];_x000D_
                                        if(totaal-1<=sum){_x000D_
                                                matrix[i][totaal - 1] = totaal;_x000D_
                                        }                                      _x000D_
                                }                                                                      _x000D_
                        }                      _x000D_
                }              _x000D_
                return solved(sum);_x000D_
        }_x000D_
       _x000D_
        /**_x000D_
         * _x000D_
         * @param sum_x000D_
         * @return_x000D_
         */_x000D_
        private boolean solved(int sum){_x000D_
               _x000D_
                if(sum<= matrix[0].length){_x000D_
                        //Kijken of er een antwoord staat in de laatste kolom_x000D_
                        //Elke rij bijlangs gaan en kijken in de laatste kolom of er een antwoord staat_x000D_
                        for(int i = 0; i<matrix.length; i++){_x000D_
                                if(matrix[i][sum-1] != 0){      _x000D_
                                        System.out.println("true");_x000D_
                                        return true;_x000D_
                                }_x000D_
                        }_x000D_
                }_x000D_
                return false;_x000D_
        }_x000D_
}_x000D_
_x000D_

// Totaal is gelijk aan de som van B - het getal voor de huidige_x000D_
package dynProg.solvers;_x000D_
_x000D_
import dynProg.Solver;_x000D_
_x000D_
public class BottomUpSolver implements Solver{_x000D_
       _x000D_
        private int[][] matrix;_x000D_
        _x000D_
        public BottomUpSolver(){                _x000D_
        }_x000D_
       _x000D_
        public static void main(String[] args){_x000D_
                BottomUpSolver s = new BottomUpSolver();_x000D_
                s.solve(new int[]{3,5,7,9,11}, 17);_x000D_
        }_x000D_
       _x000D_
     _x000D_
        public boolean solve(int[] numbers, int sum){          _x000D_
                matrix = new int[numbers.length][sum];  _x000D_
                // Elke rij bijlangs gaan_x000D_
                //M(i,j)_x000D_
                //row == i_x000D_
                //answer == j_x000D_
                int totaal=0;_x000D_
                for(int p=0;p<numbers.length;p++){_x000D_
                        totaal += numbers[p];_x000D_
                }_x000D_
                for(int i = 0; i<numbers.length; i++){                  _x000D_
                        int somB = 0;_x000D_
                        for(int j = 0; j<=i; j++){      _x000D_
                                // Plaats de huidige_x000D_
                                // Als numbers j is 3 dan wordt er een 1 geplaatst op M(0,2)_x000D_
                                matrix[i][numbers[j]-1] = numbers[j];_x000D_
_x000D_
                                // De som uitvoeren_x000D_
                                // Zolang de som van B kleiner is dan 17 zal hij toegevoegd worden aan de matrix_x000D_
                                // Als {3,5} aan de beurt is wordt er dus 8 uitgerekend_x000D_
                                // Gekeken of het kleiner is dan 17_x000D_
                                // en vervolgens in dit geval op {1,7} geplaatst_x000D_
                                somB += numbers[j];    _x000D_
                                if(somB<=sum){                                  _x000D_
                                        matrix[i][somB - 1] = somB;_x000D_
                                }_x000D_
                                                               _x000D_
                                // De som van de vorige_x000D_
                                // Totaal is<SUF>
                                // Dit moet eigenlijk vaker om alle antwoorden te krijgen maar is op dit moment niet nodig om te doen_x000D_
                                if (j > 0)_x000D_
                                {_x000D_
                                        totaal = somB - numbers[j - 1];_x000D_
                                        if(totaal-1<=sum){_x000D_
                                                matrix[i][totaal - 1] = totaal;_x000D_
                                        }                                      _x000D_
                                }                                                                      _x000D_
                        }                      _x000D_
                }              _x000D_
                return solved(sum);_x000D_
        }_x000D_
       _x000D_
        /**_x000D_
         * _x000D_
         * @param sum_x000D_
         * @return_x000D_
         */_x000D_
        private boolean solved(int sum){_x000D_
               _x000D_
                if(sum<= matrix[0].length){_x000D_
                        //Kijken of er een antwoord staat in de laatste kolom_x000D_
                        //Elke rij bijlangs gaan en kijken in de laatste kolom of er een antwoord staat_x000D_
                        for(int i = 0; i<matrix.length; i++){_x000D_
                                if(matrix[i][sum-1] != 0){      _x000D_
                                        System.out.println("true");_x000D_
                                        return true;_x000D_
                                }_x000D_
                        }_x000D_
                }_x000D_
                return false;_x000D_
        }_x000D_
}_x000D_
_x000D_
