算法——贪心算法

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

# 首先创建一个表,包含所覆盖的州
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)

输出结果:


相关推荐
夜雨翦春韭2 小时前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
人才程序员3 天前
CSP-J 复赛算法 贪心算法
c语言·c++·算法·贪心算法·noip·竞赛·noi
末代隐官-3 天前
贪心算法(4)
c++·算法·贪心算法·哈希算法
小付爱coding3 天前
【玩转贪心算法专题】968. 监控二叉树【困难】
算法·贪心算法
人才程序员4 天前
CSP-J 复赛算法 贪心算法练习
c语言·开发语言·c++·算法·贪心算法·竞赛·csp
小冉在学习5 天前
leetcode刷题day27|贪心算法Part01(455.分发饼干、376. 摆动序列、53. 最大子序和)
leetcode·贪心算法·排序算法
小冉在学习5 天前
leetcode刷题day30|贪心算法Part04重叠区间问题(452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间)
算法·leetcode·贪心算法
LuckyRich16 天前
【贪心算法】贪心算法二
算法·贪心算法
Catherine1213147 天前
算法打卡 Day34(贪心算法)-分发饼干 + 摆动序列 + 最大子序和
数据结构·c++·算法·leetcode·贪心算法
Catalany7 天前
Leetcode134 加油站 - 贪心!
leetcode·贪心算法