I have a program that will calculate the minimal area taken by fitting rectangles together.
Input: Rectangles of different height and width.
Output: One rectangl
I'd start by skimming through http://mathworld.wolfram.com - they're awesome for stuff like this.
Second, I could envision a dopey algorithm that would put the longest (in the X dimension) box on the bottom, then the tallest (in the Y dimension) on top of it on one side or the other. Then continue stacking them in this "stair-stepped" fashion going right wards and upwards (for example go right until you can't, then go up, etc, etc).
That's probably non-ideal, and may very well give you bad results, but it's what popped to mind first.