1. 程式人生 > >bzoj2754 [SCOI2012]喵星球上的點名

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位置並更新左右指標,每次從中選最大的數,用堆維護即可。

程式碼: