初三复训考试2

初三复训考试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上原题没有上司的舞会原题

posted @ 2021-07-01 16:02  wsy_jim  阅读(42)  评论(0编辑  收藏  举报