onurLe 25/07/2008 à 11:20
C'est un PLNE:
soit V = {v1,v2,v3...vn} ta liste en entrée
variables: x1,x2,x3..., xn
avec x1: je prends le 1er nombre
x2: je prends le deuxieme, etc..
tu veux:
Minimiser e
sous
e >= (N - v1*x1 - v2*x2 - v3*x3 ... - vn* xn)
e >= - (N - v1*x1 - v2*x2 - v3*x3 ... - vn* xn)
x1,x2,.... xn appartenant à l'ensemble des entiers.
tu mets ca sous la forme
A*X <= B, si A est une matrice totalement unimodulaire, tu n'as pas besoin de forcer les xi à entier (et ca resoudra en temps polynomial)
edit: si on ne peut pas prendre deux fois un meme élément de la liste, alors c'est x1,x2,... xn appartenant à {0,1} autrement dit on est sur un hypercube de dimension n