|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.03.2010, 19:32 | #1 |
Регистрация: 20.03.2010
Сообщений: 6
|
Разрезы без отходов
Есть такая задача:
Разрезать прямоугольник размера X*Y на детали прямоугольной формы размера X1*Y1 и X2*Y2, чтобы отходы были минимальны. Возможны только вертикальные и горизонтальные разрезы. Т.е. после первого разреза получается два прямоугольника, которые в последствии также можно разрезать. Входные данные Входные данные находятся в текстовом файле с именем input.txt: Во входном файле шесть целых чисел (1<=X<=100, 1<=Y<=100, 1<=X1<=X, 1<=Y1<=Y, 1<=X2<=X, 1<=Y2<=Y). Выходные данные Выходные данные должны быть записаны в текстовый файл с именем output.txt и иметь следующий формат: единственное целое число равное минимальной сумме остатков. Пример входных данных 10 10 2 9 3 4 Пример выходных данных 10 Подскажите, как написать максимально быстрый алгоритм? |
20.03.2010, 23:38 | #2 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Куски на 90 градусов вращать можно?
|
21.03.2010, 09:00 | #3 |
Регистрация: 20.03.2010
Сообщений: 6
|
Да, детали вращать можно. И разрезы от края до края. Зигзагообразно резать нельзя. Эта задача как-то сводится к задаче о разрезке обоев с рисунком. Но как решать задачу про обои я знаю лишь в теории.
|
21.03.2010, 09:27 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
1- решение данной задачи представляет коммерческую ценность и немалую
2- существуют различные приближающие методы: генетические алгоритмы, симплекс-метод, параметрическая оптимизация, исключения интервалов и т.п. (это все есть в вики) 3- на форуме >>> обсуждалось <<< тут очень хорошо расписан генетический алгоритм + прилагаю статью об еще одном методе фигурного раскроя (см. ниже)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
21.03.2010, 10:16 | #5 | |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Цитата:
Обычное динамическое программирование: Код:
Последний раз редактировалось Carbon; 21.03.2010 в 10:23. |
|
21.03.2010, 11:44 | #6 |
Регистрация: 20.03.2010
Сообщений: 6
|
Carbon, Спасибо! Она работает очень(!) быстро. Вы сами придумали алгоритм или это уже существующий? Мы такого не учили... Хотелось бы почитать.
Нулями метим углы возможного расположения деталей. А как с помощью побитового сдвига(я надеюсь это он?) и оценок мы заполняем матрицу? |
21.03.2010, 12:09 | #7 | |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Цитата:
Ну до этого я догадался сам, хотя подобную задачу видел на одной из школьных олимпиад. Алгоритм такой: Расчитываем все остатки при разрезании досок меньших размеров. По очереди рассматриваем все доски и пусть у нас встретилась доска PxQ: 1) Если одна из двух частей имеет размеры PxQ или QxP, то в этом случае остатков не будет и на место ставим 0. 2) В противном случае на место ставим P*Q. Т.е. если в эту часть не влезет ни одна из исходных фигур. Затем перебираем все возможные разрезы по горизонтали и вертикали до P/2 и Q/2 соответственно (дальше делить нет смысла, потому что значения будут повторяться) и считаем сумму элементов [A;Q] и [P-A;Q] и также [P;B] и [P;Q-B] (это и есть разрезы по координатам A и B) и среди этих сумм находим минимальную сумму остатков. Более того, очевидно, что при повороте исходного прямоугольника на 90 градусов результат не изменится, поэтому алгоритм можно ещё ускорить примерно вдвое, считая только элементы за главной диагональю. ЗЫ Не забываем нажимать на весы. Последний раз редактировалось Carbon; 21.03.2010 в 12:13. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
таблица без БД | m.a.x.i.m | БД в Delphi | 6 | 05.12.2009 15:46 |
Без антивируса | Slavik | Безопасность, Шифрование | 54 | 25.05.2009 01:46 |
Процедуры без Bios и без Dos,бывают? | codeok | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 31.10.2008 03:17 |
без VBA | ExcArt | Microsoft Office Excel | 7 | 18.02.2008 01:23 |