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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2012, 13:30   #1
Sega_AS
Пользователь
 
Регистрация: 22.02.2012
Сообщений: 15
По умолчанию (Классика) Куча камней сортировка НЕ пузырьком.

У вас есть несколько камней известного веса W1, …, Wn. Напишите программу, которая распределит камни в две кучи так, что разность весов этих двух куч будет минимальной.
Исходные данные
Ввод содержит количество камней N (1 ≤ N ≤ 20) и веса камней W1, …, Wn (1 ≤ Wi ≤ 100 000) — целые, разделённые пробельными символами.
Результат
Ваша программа должна вывести одно число — минимальную разность весов двух куч.

Код:
program kamni;

var
  n, i, k, min, v,a,b,p: integer;
  m: array[1..10000000] of int64;
label metka;
begin
  read(n);
  for i := 1 to n do 
  begin
   read (m[i]);
   if m[i]<0 then goto metka;
  end;
  for i := 1 to n - 1 do 
  begin
    min := i; for k := i + 1 to n do
      if m[min] < m[k] then min := k;
    v := m[min]; m[min] := m[i]; m[i] := v;
  end;
a:=0;
b:=0;
for i:=1 to n do
if a-b<=0 then a:=a+m[i]
else b:=b+m[i];
begin
If a-b<0 then P:=b-a;
If p>0 then writeln (P);
writeln(a-b);
end;
metka:
end.
Сортировка пузырем крашит тест

6
1 4 5 6 7 9
0

А у меня

6
1 4 5 6 7 9
2
-2

Скажите какой сортировкой воспользоваться ?
Sega_AS вне форума Ответить с цитированием
Старый 28.04.2012, 14:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

то, что Вы отстортировали по весу - это правильно.
а вот потом, Вы, вероятно, неправильно распределяете элементы по весу.

рекомендую почитать вот эту тему:

Разделение предметов по весу

и взять предложенный в ней алгоритм (пост #2 (c) Smitt&Wesson

а, учтите, что полученное решение будет близким к оптимальному, НО, разумеется, НЕ ОПТИМАЛЬНЫМ (я там в теме об этом говорил).
если нужно оптимальное решение - то нужен перебор всех вариантов, конечно!


Добавлено
посмотрел на ваш пример. нет, упрощённый алгоритм вам не подойдёт. нужен перебор!


о переборе (и коды)
можете почитать в темах

Жадный алгоритм и перебор

Выборка чисел

особенно обратите внимание на посты от (c) LeBron - судя по всему, это Гуру олимпиад по программированию!

Последний раз редактировалось Serge_Bliznykov; 28.04.2012 в 14:51.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка пузырьком onezze Паскаль, Turbo Pascal, PascalABC.NET 0 09.04.2012 16:18
Задача - куча камней. InKo1 Общие вопросы C/C++ 11 04.01.2012 18:23
Сортировка пузырьком с++ FroLe Общие вопросы C/C++ 6 20.12.2010 01:23
Сортировка пузырьком Авторитет Общие вопросы .NET 4 15.11.2010 19:50