RaviManna Ответов: 2

Алгоритм расстояния - минимальные монеты, необходимые для очистки всех уровней


Тор играет в игру, где есть N уровней и M типов доступного оружия. Уровни пронумерованы от 0 до N-1, а оружие-от 0 до M-1 . Он может очистить эти уровни в любом порядке. На каждом уровне требуется некоторое подмножество этих М-видов оружия, чтобы очистить этот уровень. Если на определенном уровне ему нужно купить x новых видов оружия, он заплатит за это x^2 монеты. Также обратите внимание, что он может нести все оружие, которое у него есть в настоящее время, на следующий уровень . Изначально у него не было никакого оружия. Можете ли вы узнать минимальное количество монет, необходимых для того, чтобы он мог очистить все уровни?

Формат ввода первая строка ввода содержит 2 целых числа, разделенных пробелами: N = количество уровней в игре M = количество видов оружия

Далее следует N строк. I-я из этих строк содержит двоичную строку длины M. Если j-й символ этой строки равен 1, это означает, что нам нужно оружие типа j, чтобы очистить I-й уровень.

Ограничения 1 <= N <=20 1<= M <= 20

Формат вывода выведите одно целое число, которое является ответом на проблему.

Образец Теста 1

Ввод
1 4
0101

Выход 4

Объяснение в этой игре есть только один уровень. Нам нужно 2 вида оружия - 1 и 3. поскольку изначально у Тора нет оружия, ему придется купить их, что обойдется ему в 2^2 = 4 монеты.

Тестовом Примере 2
Ввод
3 3
111
001
010

Выход 3

Объяснение в этой игре есть 3 уровня. Для 0-го уровня (111) требуются все 3 вида оружия. 1-й уровень (001) требует только оружие типа 2. 2-й уровень требует только оружие типа 1. Если мы очистим уровни в заданном порядке(0-1-2), то общая стоимость = 3^2 + 0^2 + 0^2 = 9 монеты. Если мы очистим уровни в порядке 1-2-0, это будет стоить = 1^2 + 1^2 + 1^2 = 3 монеты, которые являются оптимальным способом.

Что я уже пробовал:

Я знаю, что это можно сделать с помощью алгоритмов расстояния, любая помощь будет оценена по достоинству

PIEBALDconsult

Удачи тебе с этим.
Я бы применил грубую силу.

Patrice T

И вы можете сказать нам, какой сайт делает этот "конкурентный вызов"?

RaviManna

https://stackoverflow.com/questions/49772462/competitive-coding-clearing-all-levels-with-minimum-cost-not-passing-all-tes

2 Ответов

Рейтинг:
2

OriginalGriff

Это, как вы говорите, "конкурентное программирование". Это означает, что любая помощь, которую мы вам оказываем, дезавуирует ваших коллег-конкурентов, а также (по крайней мере, морально, если не обязательно юридически) мошенничество.

Исследуйте во что бы то ни стало, спросите, не застряли ли вы в определенной точке. Но просто скопировать и вставить вопрос и сказать "помогите мне" - это то же самое, что пытаться заставить нас сделать вашу домашнюю работу, а мы этого не делаем.


RaviManna

Соревнование закончилось, мне было любопытно узнать решение. В любом случае спасибо за вашу помощь!

Рейтинг:
2

Patrice T

Цитата:
Я знаю, что это можно сделать с помощью алгоритмов расстояния, любая помощь будет оценена по достоинству

Я, должно быть, упускаю большое, потому что я даже не вижу, в чем трудность этой проблемы. Даже с 200 видами оружия и уровнями.
Решение - это грубая сила
Make an array of weapons you have
Make a pool of the levels
As long as some levels remain
  Check cost of all levels and remember cheapest
  buy weapons
  remove the level from pool
display total cost

Похоже, мой алгоритм brut force также является жадным алгоритмом.