Поиск наиболее подходящих наборов из последовательности (очень много сочетаний)
В upd2 верный алгоритм, выбирать из «лучших» можно первый попавшийся, это абсолютно не влияет на получающийся результат. (Если я правильно понял — то Вы сейчас рассматриваете все варианты с различными «лучшими» выбранными на каждом шаге?)
А в чем проблема посчитать биты в последовательности длиной 1024 бита? Они у вас в чем хранятся? Я думаю в конце эта задача сведется к 1024 сдвигов. Загрузите в их в 32 long'а и пробегитесь по массиву.


long[][] myArray = new long[43000][32];
int[] bitsCount =  new int[43000];

//загружаем в 32 лонга свою последовательность. 32*4*8 = 1024 бита
<тут ваш какой-то код>

//определяем количество установленных бит
for(int i = 0;i<43000;i++)                   //цикл по всем последовательностям
   for (int j = 0;j<32;j++)                    //цикл по всем long'ам
      for(int k = 0;k<32;k++)                //цикл по всем битам лонга
         if((myArray[i][j] >> k) & 0x1)
            bitsCount[i]++;

//дальше сортируем массив bitsCount и берем N верхних. Или оптимизируем сортировку чтобы она не полностью сортировала, а только искала N верхних

//???


//PROFIT!


Работать будет не очень долго. Уж точно не пару дней. Или я задачу не понял?