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位置并更新左右指针,每次从中选最大的数,用堆维护即可。

代码:

猜你喜欢

转载自www.cnblogs.com/Oracle-LinJH/p/9824024.html