Достаточно посмотреть на на знаки компонент градиента целевой функции. И в зависимости от этих знаков соответствующая компонента решения будет

или

.
вот я не могу доказать почему это так... и, наверное, поэтому не понимаю, что делать с нулевыми компонентами градиента.
Если с помощью условия (1) понизить размерность задачи, то, действительно, условие (1) исчезнет, появятся новые искомый вектор и целевая функция.
Да, но из первой задачи мы узнаём, что все компонеты точки максимума - единицы и нули, кроме какой-то

'ой, это поможет нам решить вторую задачу, в которой мы исключаем эту

'ю компоненту. Получаем целевую функцию (совпадающую по значениям с исходной) для которой не нужно знать чему равна "дробная" компонента

:
![$$\frac{1}{a_s+b_s}\left[
a_s \sum b_i +
\sum\limits_{i\neq s}(a_i b_s -a_s b_i)k_i
\right]$$ $$\frac{1}{a_s+b_s}\left[
a_s \sum b_i +
\sum\limits_{i\neq s}(a_i b_s -a_s b_i)k_i
\right]$$](https://dxdy-02.korotkov.co.uk/f/5/c/5/5c554a5bb215be6dd7b40ff3c241579082.png)
условия

станут такими:

А компоненты максимума уже известны (учитывая предположение о градиенте):

Теперь, получается, что максимум, который ищем - это некая функция от

(для

должны выполняться условия (3) и (4)). Если все варинты перебирать, то выходит алгоритм за

(выглядит так, что еще быстрее можно). Остаётся случай где "компоненты градиента" равны нулю, там нужно проверить и 0 и 1, что вываливается в экспоненциальное решение.