算法学习笔记9-贪心算法
来源:互联网 发布:js数学公式编辑器 编辑:程序博客网 时间:2024/05/16 05:11
题目描述
某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大。
输入描述
输入包括m+2行。
第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000)
第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。
接下来m行,每行两个参数b,c。分别表示第i批客人的人数和预计消费金额,以空格分隔,范围均在32位int范围内。
输出描述
输出一个整数,表示最大的总预计消费金额。
#coding=utf-8import sysimport bisectwhile True: line=sys.stdin.readline().strip() if line: n,m=map(int,line.split()) d=map(int,sys.stdin.readline().strip().split()) c=[] for i in xrange(m): c.append(map(int,sys.stdin.readline().strip().split())) c.sort(key=lambda x:(x[1],x[0]),reverse=True) #生成一个二维数组且优先按照顾客预计消费金额降序排列 d.sort()#按照每个桌子能容纳人数升序排列 money=0 for i in c: f=bisect.bisect_left(d,i[0])#二分查找坐得下的桌子 if f!=len(d): money+=i[1] del d[f]#删除这张桌子,因为已经被预定 print money else: break
算法的主要思想是:每次选择预计消费金额最大的客人,直到桌子用完。贪心算法的核心就是:每一步都选择当前最优的。
阅读全文
0 0
- 算法学习笔记9-贪心算法
- 【算法学习笔记】贪心算法
- |算法讨论|贪心算法 学习笔记
- 学习笔记---回溯算法与贪心算法
- |算法讨论|贪心算法 学习笔记
- 算法学习:贪心算法
- 算法学习--贪心算法
- 算法学习笔记——贪心法
- 编程学习笔记7--贪心算法
- 算法导论学习笔记-第十六章-贪心算法
- 算法导论学习笔记——贪心算法
- 算法学习之- 贪心算法
- 贪心算法学习
- 贪心算法 学习小记
- 贪心算法的学习
- 贪心算法学习
- 贪心算法学习总结
- 贪心算法练习笔记(一)
- hadoop安装
- gulp-rev:项目部署缓存解决方案
- P3366 【模板】最小生成树
- MySQL(一)
- EL表达式在JSP中取值
- 算法学习笔记9-贪心算法
- 数据结构及基本算法简介
- 深入php面向对象、模式与实践
- 百度前端技术学院_斌斌学院_task06
- 从“周星星”到“星仔”再到“星爷”做人如果没有梦想,和咸鱼又有什么分别?
- AESUtil AES加密/解密
- 机器学习基石 8.4 Weighted Classification
- MATLAB 入门
- 详解PHP操作MySQL数据库