Ps1, Ps2, Ps3, Ps4, Ps5 и F являются заданными значениями. Мне нужно найти значения a, b, c, d и e, которые максимизируют результат этого уравнения:
60 + a (Ps1-F) + b (Ps2-F) + c (Ps3-F) + d (Ps4-F) + e (Ps5-F) = 0
Ограничения заключаются в том, что сумма a, b, c, d и e никогда не может быть меньше чем 20, и каждый из этих элементов может быть только 0 или 10.
Это то, что я сделал до сих пор:
a = 0
b = 0
c = 0
d = 0
e = 0
values = [a, b, c, d, e]
def roll_over(f, p1, p2, p3, p4, p5):
counter = 0
constants = [p1 - f, p2 - f, p3 - f, p4 - f, p5 - f]
for i in constants:
if i >= 0:
values[counter] = 10
else:
values[counter] = 0
counter = counter + 1
После этого мне нужно обработать случай, в котором я иметь только отрицательные значения в константах списка (и, следовательно, приведенный выше код дает мне только 0 для значений списка. Идеальная стратегия состоит в том, чтобы взять два самых больших элемента в константах списка (даже если они отрицательные) и присвоить число 10 двум элементы в списочных значениях с тем же индексом, оставляя остальные как 0 сортируя список постоянно, я не могу найти способ вернуться к соответствующим элементам в значениях (что быть d и b соответственно).
Спасибо!