Другие языки программирования и технологии

Вопрос по программированию. Алгоритмы

Подскажите алгоритм для решения следующей задачи. Есть бесконечное число листов бумаги одинакового размера из которых необходимо срезать полоски разной ширины. Входные параметры - список строк вида: a b, где а - ширина полоски, b - количество таких полосок. Количество строк со входными параметрами не регламентируется. Необходимо разложить на исходных листах все необходимые полосы таким образом, чтобы отход бумаги был минимален. Заранее спасибо. Что не понятно в условии задачи спрашивайте, поясню.
Makcim Fedorov
Makcim Fedorov
103
Это задание слово в слово или где-то есть исходник?
ОМ
Олег Матвеев
76 473
Лучший ответ
Оптимальнее всего будет так:
1) Организуем в памяти сортированный по убыванию список нужных размеров с количеством
2) Берём ширину листа W
3) Указатель на 1 элемент списка
4) Пока (W минус ширина текущего элемента > 0) и (количество > 0)
5) W = W - ширина текущего элемента
6) количество = количество - 1
7) Конец цикла
8) Если количество = 0 Тогда удалить текущий элемент списка а указатель на следующий элемент Иначе если W > 0 и ещё не конец списка Тогда указатель на следующий элемент списка и перейти к (4)
9) Если достигли конца списка и размер списка > 0 Тогда перейти к (2)

Но если действительно нужно найти именно «чтобы отход бумаги был минимален» , то только «перебор» всех возможных вариантов…
заморачивался за текстуры. задача про копилки тут не подойдет. вообще мне кажется это NP-полная задача.
мы делали просто кидая от левого угла либо влево, либо вниз. туда где меньше. но это все равно недетерминировано получается, а ответ может быть вполне однозначным.
вобщем если нужно вообще оптимально, то только улучшать и упрощать перебор как в любой NP-полной.
самый эффективный (с точки зрения обрезков) но по времени выполнения самый длительный - перебор всех возможных вариантов выкроек.. .

что то подобное писал.. были выкройки из листов ДСП.. .

могу помочь с реализацией... но не бесплатно
1111 11111
1111 11111
2 763