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