初三复训考试2
初三学长太神力!!!!
挂分日常
A 怪物猎人
背包变种
会吃人
题意就是在一堆物品中按顺序选k个使得下面式子小于某个数,求k的最大值
[p=sum_{i=1}^{k}(a[i]+(i-1)*d)(b[i]+(i-1)*d)
]
把它拆开以后是
[p=sum_{i=1}^{k}(a[i]*b[i]+(a[i]+b[i])*(i-1)*d+(i-1)*(i-1)*d*d)
]
如果物品已经排好序,那么(a[i]*b[i])和((i-1)^2d^2)就是定值了不用考虑
就直接跑一遍背包选数就可以了
那按什么顺序排序呢
[p'=sum_{i=1}^k (a[i]+b[i])*(i-1)*d
]
这是去除常数之后的式子
只与(a[i]+b[i])有关
我们希望它最大
发现((i-1)*d)是单调递增的
即问题转化为有两个序列:(a_1,a_2,a_3,...,a_n)和(b_1,b_2,b_3,...,b_n),求(sum_{i=1}^na_{p_i}b_{q_i})最大时的排列p和q
用到排序不等式
即
[两个从大到小排好序的序列\
反序和 leq 乱序和 leq 顺序和
]
所以当(a[i]+b[i])单调递减的时候,(p')是最小的
我们按它从大到小排序跑一遍背包就行了
B 无敌的宠物
线段树板子 注意pushdown位置要不然越界危
C bamboo
最短路建图题注意double最短路是最大值要在double范围内判无解的时候要用>=
D 水杯
题意:给一个序列,求O(nlogn)从一个数出发的最长上升子序列和最长下降子序列的和
直接维护俩单调队列一个上升一个下降复习LIS写法有简单写法更简单的改板子了吐了
E 大白兔的聚会
原题考过原题luogu上原题没有上司的舞会原题