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 :
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.
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();
J'ai besoin de votre aide, et merci d'avance
Partager