segaman: le probleme ici est plus algorithmique que mathematiques: les maths seront à utiliser pour fournir des objets utilisables; en effet, un rectangle avec une position dans l'espace n'est pas utilisable tel quel. Et là les maths deviendront quasiment indispensables, pas avant.
Une idée qui peut etre à creuser:
_on commence par eliminer tous les rectangles trop gros pour rentrer dans la surface
_on range tous les rectangles par ordre de hauteur croissante
_ en prenant la plus grande hauteur trouvée, on essaye en prenant les rectangle par ordre decroissant de largeur de former une ligne complete: on les places cote à cote jusqu'à ce que la ligne soit formée ou que l'on aie un rectangle trop large: dans ce cas on le laise de coté et on continue en prenant celui qui est immediatement moins large.
_ une fois qu'on a reussit à former une ligne, on tente de remplecer nos gros rectangle par des plus petits issu de la meme hauteur en repartant dans le sens opposé...
_ puis on passe à la ligne suivante.... etc
Euh, à mon avis personne ne va comprendre ce que j'ai écrit

Mais c'est trop compliqué à expliquer, et à programmer encore plus. Bien sur il y a des cas à revoir en detail comme quand on est obligé de crée une marche par un manque de rectangle, mais je pense qu'il y a un petit peu de bon dans cette idée...