Bonjour à tous

J'utilise la programmation par contraintes pour resoudre un petit probleme, j'ai un tableau de n entier et je dois prendre les entiers qui ont une somme egale à S. exemple: t= 100, 120, 90, 200, 80, 20 et S=200
resultat souhaité
1) 100+20+80
2) 200
3) 120+80
...etc

j'ai fais ce code qui n'est pas complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int somme = 200;
		int[] tab = new int[] {100, 120, 90, 200, 80, 20};
 
			Model m = new CPModel();
			Solver s = new CPSolver();
 
                        IntegerVariable[] vars = new IntegerVariable[tab.length];
                        for (int i = 0; i < tab.length; i++) 
                            vars[i] = Choco.makeIntVar("a"+i, 0, 1);
 
 
 
                        IntegerExpressionVariable  s1 = null;
                        for (int i = 0; i < tab.length; i++)
                        {
                            s1 = Choco.plus(Choco.mult(vars[i], tab[i]), s1);
                        }
 
                        m.addConstraint(Choco.eq(s1,somme));
 
 
			s.read(m);
			s.solve();
comme vous voyez, j'ai creer autant de variables que d'element ds le tableau, ces variables peuvent prendre soit 0 soit 1, selon on prend ou on prend pas, si l'entier est selectionner on met 1 sinn on met 0.

J'ai besoin de votre aide, et merci d'avance