De 1 / 9,1 / 8,1 / 7, 1/2, etc., ¿cuál es la mejor manera de dividir los números en dos grupos de cuatro para que la suma de cada grupo sea la más cercana? Tengo el método de fuerza bruta y la respuesta, pero ¿cuál sería una solución inteligente?

Este es un ejemplo del problema de la mochila: Wikipedia.

Multiplicando por 2520 para obtener enteros, obtenemos 280, 315, 360, 420, 504, 630, 840 y 1260, que suman 4609. Idealmente, estos se dividirían 2304 a 2305.

El más grande más dos más pequeños ya suman 1855, una diferencia de alrededor de 450, lo que significa que ni el segundo ni el tercero más grandes pueden estar en el mismo grupo que el más grande. Suman 1470, dejando alrededor de 835 para ir. Por inspección, 504 + 315 = 819 es el más cercano usando 504, produciendo 2289 para esa mochila y 2320 para el otro. Sin usar 504, el siguiente más alto ni siquiera suma 800, por lo que es lo mejor que se puede encontrar.

Volviendo a las fracciones:

>>> (1/3 + 1/4 + 1/5 + 1/8)
0.9083333333333332
>>> (1/2 + 1/6 + 1/7 + 1/9)
0.9206349206349207

Cabe señalar que este método funciona aquí debido a que los tamaños de los elementos varían bastante además de tener que usar cuatro en cada grupo. Espero no estar haciendo su tarea aquí, pero si es así, lea Programación dinámica: Wikipedia en detalle para la penitencia.