# Штаты, которые необходимо покрыть states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]) # Станции, на которых вещают имеющиеся радиостанции stations = {} stations["kone"] = set(["id", "nv", "ut"]) stations["ktwo"] = set(["wa", "id", "mt"]) stations["kthree"] = set(["or", "nv", "ca"]) stations["kfour"] = set(["nv", "ut"]) stations["kfive"] = set(["ca", "az"]) # Набор радиостанций, покрывающий все необходимые штаты final_stations = set() while states_needed: best_station = None # Штаты, обслуживаемые этой станцией, которые еще не входят в текущее покрытие states_covered = set() # Перебор всех радиостанций и поиск наилучшей из них for station, states_for_station in stations.items(): # Пересечение множеств необходимых к покрытию станций с станциями для # итерируемой радиостанции covered = states_needed & states_for_station # Если длина множества пересечения больше длины покрытия лучшей текущей станции # Иными словами в пересечение входит больше покрываемых штатов, чем для текущей # лучшей станции if len(covered) > len(states_covered): # Назначаем эту станцию лучшей best_station = station # Переопределяем штаты, покрываемые лучшей на данный момент станцией states_covered = covered # После прохождения цикла лучшая станция добавляется в список станций для покрытия final_stations.add(best_station) # Необходимо вычесть из нужных для покрытия станций те, которые входят в найденную # станцию states_needed -= states_covered print(final_stations)