10Fermer12
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