作业帮 > 综合 > 作业

在长度为L的线性表中,从第一个元素开始(包括第一个元素),找出两两之间距离不超过M的N个数字,使它们的和最大.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 06:31:39
在长度为L的线性表中,从第一个元素开始(包括第一个元素),找出两两之间距离不超过M的N个数字,使它们的和最大.
希望能给出主要代码,
回复 xuenan199.不是NOI的.
我以为官网已经有NOI试题了,去看才知道没有.
Day1的题目我已经上传到百度空间了.
.维护两个堆就可以了
因为是线性表,所以最远的两个元素距离不超过M就可以了
主要方法就是枚举长度为M的区间的位置,然后维护这个区间内最大的N个数
一个小根堆,维护选中的这N个元素
一个大根堆,维护尚在区域中却没有在堆中的元素
每次将区间向右移动一格,这时候有一个元素出了区域,将这个元素在堆中删除
然后有一个元素入了区域,将元素加入大根堆
然后判断如果小根堆元素未满N个,则将大根堆顶元素加入
如果小根堆元素有N个,但是大根堆顶元素比小根堆顶元素大,则替换
主要用到5个数组
存储线性表
存储大根堆,记录每个位置存的是线性表中第几个元素
存储小根堆,存储方式同上
标记数组1,标记线性表中每个元素在大根堆中还是小根堆中
标记数组2,标记线性表中每个元素在堆中的哪个位置
所以调堆的时候也要记得调整标记数组,这是堆的一个基本操作
如果还不懂可以用邮件联系我
不要加