bzoj2754 [SCOI2012]喵星球上的点名
题目大意:
给定一个大小为n的序列$ a_1,a_2,a_3...a_n $,问从中选至多k个不相邻的数(可以小于k个),权值和最大为多少。
解题方法:
考虑选取一个数对其两边的影响,当选了$
a_p $时,p位置左侧的数和右侧的数都无法选,但存在一种决策,即放弃$ a_p $,选择$ a_pl $和$ a_pr
$,为实现这一操作,可用链表,每次选出$ a_p $后,将 $ a_pl+a_pr-a_p $
填在p位置并更新左右指针,每次从中选最大的数,用堆维护即可。
代码: