пусть t [i] [j] означает, что из элементов a_1, .., a_i, j из них установлено значение true.
Теперь мы можем ясно видеть, что
t[i][j] => (t[i-1][j] or (t[i-1][j-1] and a_i).
(поскольку либо переменная уже была установлена в a_1, .., a_ (i-1), либо задана a_i, и в a_1, .., a_ (i-1) есть переменные j-1.
Это выражение размера полинома (около n * k переменных t [i] [j], для каждого выражения, подобного тому, которое я написал выше). Тогда, если t [n] [k] истинно, мы получаем, что наша из n переменных по крайней мере k истинна.
Обращаясь к Евгению, отвечу,
Чтобы получить переменные в отсортированном порядке (сначала истины, затем ложные значения), мы рассмотрим последовательность
t [n] [1], t [n] [2], .. t [n] [n].