Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 20:24   #1
Sanakan
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 47
По умолчанию Перебор всех возможных сумм элеметов массива

Есть 4 массива(их можно считать как 1 массив). И нужно сделать перебор всех возможных наборов элеметов массива и вывести в RichEdit.

Код:
      for i:=0 to Dm.Mer.RecordCount-1 do
         begin
           for j:=i to Dm.Mer.RecordCount-1 do
            begin
              tmp:=tmp+','+FloatToStr(ID_Array[j]);
              tmp1:=tmp1+Ves_Array[j];
              tmp2:=tmp2+Cen_Array[j];
              tmp3:=tmp3+Pot_Array[j];
              sRichEdit1.Lines.Add('ID - '+tmp+' Вес - '+FloatToStr(tmp1)+' Стоимость - '+FloatToStr(tmp2)+' Цена потери - '+FloatToStr(tmp3));
            end;
         tmp:='';
         tmp1:=0;
         tmp2:=0;
         tmp3:=0;
         end;
Результат:
При размерности 3.

ID - ,7 Вес - 0,388 Стоимость - 10000 Цена потери - 20000
ID - ,7,8 Вес - 0,751 Стоимость - 33000 Цена потери - 37000
ID - ,7,8,9 Вес - 0,991 Стоимость - 38000 Цена потери - 60000
ID - ,8 Вес - 0,363 Стоимость - 23000 Цена потери - 17000
ID - ,8,9 Вес - 0,603 Стоимость - 28000 Цена потери - 40000
ID - ,9 Вес - 0,24 Стоимость - 5000 Цена потери - 23000

Но видно что есть еще 1 набор это:
ID - ,7,9 Вес - 0,751 Стоимость - 33000 Цена потери - 37000

Понятно что при размерности 4 будет не хватать 2 набора и тд..Нужна ваша помощь=\ Моя голова уже сломана....

Последний раз редактировалось Sanakan; 28.03.2010 в 21:06.
Sanakan вне форума Ответить с цитированием
Старый 28.03.2010, 20:50   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Не понял, в чем задача. При размерности 4 я вижу только ид 7, 8, 9 (3 штуки)...
Если надо перебрать все варианты по принципу "ид входит или ид не входит", то битовые маски.
LeBron вне форума Ответить с цитированием
Старый 28.03.2010, 21:13   #3
Sanakan
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 47
По умолчанию

Немного не правильно написал)
Ну есть 3 элемента в массиве и получается набор:

1
1+2
1+3
1+2+3
2
2+3
3

Хотя мб моя задача решается по другому мб.. Вообще нужно выбрать например из этого списка:

Оптимальный набор мероприятий, который по стоимости укладывается в N сумму денег,с наибольшим весом и наименьшей ценой потери...
Я хотел перебрать всевозможные варианты и выбрать из них самый оптимальный набор.
Sanakan вне форума Ответить с цитированием
Старый 29.03.2010, 00:28   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Теперь понятней. Если есть специфические ограничения на входные данные, то динамика, а так или евристические алгоритмы, или полный перебор на битовых масках (перебрать все маски от 1 до 2 в степени количества пунктов в списке минус 1). Полного решения за полиномиальное время наука пока не придумала.
LeBron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с++ Перебор всех возможных подмножеств множества целых чисел Modlika17 Помощь студентам 19 10.01.2012 11:09
Перебор возможных комбинаций символов Toxask8 Общие вопросы C/C++ 1 12.12.2009 21:33
Ообработка элеметов двумерного массива Balashovec Паскаль, Turbo Pascal, PascalABC.NET 6 14.10.2009 15:01
Реализовать перебор всех возможных IP-адресов (С++) ak74m Помощь студентам 0 09.04.2009 13:59
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17