Questo più che un problema di programmazione è un problema di logica...
La prima cosa che mi viene in mente è:
vecchia lista
80 - 90
1 - 91
11 - 3
3 - 1
inserisco 2 strutture ausiliari per poi cancellarle
0 - 0
0 - 0
ordino la lista in base al seguente criterio:
resistenza + peso - peso_prec1 - peso_prec2
condizione resistenza >= peso_prec1 + peso_prec2
la prima è 3 + 1 - 0 - 0 = 4
riordino
la prima è 11 + 3 - 3 - 0 = 11
riordino
la prima è 1 + 91 - 11 - 3 = 89
rimane 80 + 90 - 3 - 0 = 170
in questo caso non andrebbe eleminato nessun elemento
nuova lista
3 - 1
11 - 3
1 - 91
80 - 90