I have been taught how to solve these kind of linear programming problems in CS class. It can be solved with the simplex method which is about as simple as it sounds.

It would be delightful to reproduce a beginner's introduction, but I can't do it single handed (on a mobile phone) shortly before I fall asleep.

Looking at the respective Wikipedia page I get the feeling that it's not much fun for people who haven't done this before:

https://en.wikipedia.org/wiki/Simplex_algorithm

The first 4 equations specify profit slopes (gradients) in 3-space. (Or maybe imagine families of planes intersecting the axies at...)

The available resource spec is practically a (we may use) less-than (these resources) relation, or a plane dividing our 3-space into two half-spaces: one where the allowed values live, and the other stuff we're not interested in. That's our simplex.

Edit: It might be a better idea to think of it as three planes orthogonal to the axies, and of the gradients as vectors. Sorry, some assembly may be required, it's been a while.

We have to find the maximal vector a•laptops + b•desktops smaller than that plane.

Since it's an _integer_ mixed linear programming problem, we may have to try a few combinations (a,b), and for this there's a closely related technique:

https://en.wikipedia.org/wiki/Cutting-plane_method

A page which might be slightly more fun.

It would be delightful to reproduce a beginner's introduction, but I can't do it single handed (on a mobile phone) shortly before I fall asleep.

Looking at the respective Wikipedia page I get the feeling that it's not much fun for people who haven't done this before:

https://en.wikipedia.org/wiki/Simplex_algorithm

The first 4 equations specify profit slopes (gradients) in 3-space. (Or maybe imagine families of planes intersecting the axies at...)

The available resource spec is practically a (we may use) less-than (these resources) relation, or a plane dividing our 3-space into two half-spaces: one where the allowed values live, and the other stuff we're not interested in. That's our simplex.

Edit: It might be a better idea to think of it as three planes orthogonal to the axies, and of the gradients as vectors. Sorry, some assembly may be required, it's been a while.

We have to find the maximal vector a•laptops + b•desktops smaller than that plane.

Since it's an _integer_ mixed linear programming problem, we may have to try a few combinations (a,b), and for this there's a closely related technique:

https://en.wikipedia.org/wiki/Cutting-plane_method

A page which might be slightly more fun.