算法——贪心算法

《算法图解》------贪心算法

复制代码
# 首先创建一个表,包含所覆盖的州
states_needed = set(['mt','wa','or','id','nv','ut','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_coverd = set()
	for station, states in stations.items(): 
		coverd = states_needed & states # 	求交集。
		if len(coverd) > len(states_coverd):  # coverd 包含在states_needed和states_for_station 中的州。检查该州是否比best_station覆盖的多。
			best_station = station
			states_coverd = coverd
	
	states_needed -= states_coverd
	final_stations.add(best_station)	# 如果是就把best_station 设置为当前广播台

print(final_stations)

输出结果:


相关推荐
小邓儿◑.◑15 小时前
贪心算法 | 每周8题(二)
c++·算法·贪心算法
咖啡啡不加糖20 小时前
贪心算法详解与应用
java·后端·算法·贪心算法
天选之女wow2 天前
【代码随想录算法训练营——Day31】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
算法·leetcode·贪心算法
smallnetter2 天前
华为OD机试C卷 - 分披萨 - 贪心 DFS - (Java & C++ & JavaScript & Python)
华为od·贪心算法·dfs
天选之女wow2 天前
【代码随想录算法训练营——Day28】贪心算法——134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
算法·leetcode·贪心算法
Gohldg2 天前
C++算法·贪心例题讲解
c++·数学·算法·贪心算法
Miraitowa_cheems4 天前
LeetCode算法日记 - Day 63: 图像渲染、岛屿数量
java·数据结构·算法·leetcode·决策树·贪心算法·深度优先
天选之女wow6 天前
【代码随想录算法训练营——Day27(Day26休息)】贪心算法——455.分发饼干、376.摆动序列、53.最大子数组和
算法·leetcode·贪心算法
小邓儿◑.◑10 天前
贪心算法 | 每周8题(一)
算法·贪心算法
闲人编程12 天前
会议安排问题之贪心算法
python·算法·ios·贪心算法·会议问题·算法改进·codecapsule