Algoritmo de empilhamento de blocos (escalonável)

Aqui está o problema. Eu tenho uma tela retangular com tamanho 1. Portanto, ele tem um sistema de coordenadas de (0,0 ... 1,0 - x e 0,0 ... 1,0 - y).

Eu também tenho alguns azulejos. Azulejos também são retângulos. Eles têm tamanho diferente e a quantidade de ladrilhos é uma variável.

eu queropilha ladrilhos em tela retangular, de 0,0 a 1,0 (da esquerda para a direita, de cima para baixo):

1) os ladrilhos devem caber na tela (mas preencham o máximo de espaço possível)

2) os ladrilhos precisam ser redimensionados (se não couberem), cada ladrilho deve ser redimensionado na mesma quantidade (eles devem permanecer nas mesmas proporções).

3) imagine que você tem esses 'ladrilhos' na sua mão e os coloca nesta tela um após o outro

4) quase como"Algoritmo TreeMap" mas - a forma dos ladrilhos deve ser a mesma (retângulos) eeu não preciso preencher todo o espaço de lona

Existe alguém que possa me mostrar um algoritmo em qualquer linguagem C (C, C ++, Java, C #)?

* Eu tentei isso.

1) calculei a área do ladrilho, depois calculei a soma das áreas do ladrilho (por exemplo: tenho dois ladrilhos, um tem a área de 2, outra área de 1, eles significa que tenho a soma total de 3)

2) então eu calculo qual a "proporção" que cada peça possui na "soma total de áreas" (por exemplo: 2/3 e 1/3)

3) calcule o tamanho do bloco retangular por Math.sqrt (x) (por exemplo: Math.sqrt (2/3))

4) desenhe lado a lado um por um ...

Mas isso não funciona sempre. Às vezes, as peças ficam fora da tela. *

questionAnswers(5)

yourAnswerToTheQuestion