问题描述
假设你办了个广播节目,要让全美50个州的听众都收听得到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。
现在为了简化问题,只需覆盖以下州:
再给出覆盖这部分州的广播电台:
代码描述
def find_best_stations(stations, states_needed):
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
return final_stations
states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]) # 需要覆盖的州
stations = {"kone": set(["id", "nv", "ut"]), "ktwo": set(["wa", "id", "mt"]), "kthree": set(["or", "nv", "ca"]),
"kfour": set(["nv", "ut"]), "kfive": set(["ca", "az"])} # 覆盖这部分州的广播电台
final_stations = find_best_stations(stations,states_needed) # 寻找最佳选站集合
print(final_stations)