BZOJ1150 [CTSC2007]数据备份Backup 题意: 给定一个长度为\(n\)的数组,要求选\(k\)个数且两两不相邻,问最小值是多少 题解: 做一个小根堆,把所有值放进去,当选择一个值之后,把它左右两边的值也删去,同时用两边的值减自身值放入小根堆,也就是如果不选当前值,必然要选两边的值来代替,可以自行证明 如果选的数是在两端的话,那么把相邻的值直接删掉就好了,因为如果端点值比相邻值更优,显然不可能选相邻值 用链表维护一下每个值两边的值即可 //#pragma GCC optimi…