поиск максимального количества кусков, которые можно вырезать из одного дерева - PullRequest
0 голосов
/ 11 июля 2020

Извините за вопрос такого типа, но я ищу установленный алгоритм решения проблемы, как показано ниже. Я не мог найти имя. Вопрос ниже

Хороший стул жизненно важен для производительности труда. Вы покупаете дерево и пытаетесь сделать стул самостоятельно!

В магазине товаров для дома много дерева ровно длины L. По проекту вам понадобятся куски дерева длиной a [i] ровно мм. чтобы построить стул.

Вы можете вырезать из дерева, купленного в магазине товаров для дома, сколько угодно. Например, вы можете разрезать кусок дерева длиной 5 на отрезки 1,4 или 1,3,1

Какое минимальное количество кусков дерева вам нужно купить для улучшения дома? store для завершения стула?

CLI реализации Создайте решение как приложение CLI, которое получает входные значения от stdin и возвращает ожидаемый результат на stdout. Подробнее см. В разделе «Шаблон приложения командной строки» внизу этой страницы.

Ввод Стандартный ввод

a [1] ... a [м] L

1≤m≤10, целое число

1≤a [i] ≤L, целое число

1≤L≤100, целое число

Вывод Распечатайте в первой строке минимальное количество деревянных досок, которые вам нужно купить для изготовления стула.

Примеры ввода-вывода Вы можете найти ожидаемые пары ввода и вывода в каталоге test /. Пожалуйста, обратитесь к этому каталогу при реализации.

Пример ввода / вывода 1

Стандартный ввод

3 5 2 10

Стандартный вывод

1

Если вы купите 1 кусок дерева длиной 10 и разрежете его на отрезки 3, 5, 2, у вас будет достаточно древесины, чтобы закончить стул.

Пример ввода-вывода 2

Стандартный ввод

6 7 6 10

Стандартный вывод

3

Необходимо купить 3 куска дерева. Пилив как [10,10,10] → [6,4,7,3,6,4], у вас будет достаточно дерева, чтобы закончить стул. В этом случае части длины 4,3,4 останутся.

Пример ввода / вывода 3

Стандартный ввод

6 7 4 10

Стандартный вывод

2

В этом случае вы можете разрезать кусок дерева длиной 10 на отрезки 6,4. Пилив как [10,10] → [6,4,3,7], у вас будет достаточно дерева, чтобы закончить стул. В этом случае остается кусок длиной 3.

Мой подход (псевдокод):

int c_number_of_wood_needed == 1

int Остающийся_ кусок = Max_length

sort (array_of_pieces)

для каждой ЧАСТИ в array_of_pieces:

 if remaining_piece>=PIECE:
 remaining_piece=remaining_piece-PIECE

 else:
 remaining_piece==Max_length
 c_number_of_wood_needed++
 remaining_piece=remaining_piece-PIECE
...