T1
- 考虑贪心
- 我们希望代价最小,就是想让每一天的花费最小(生产 + 保存)
- 只要从前往后动态维护一个花费的一个前缀就可以 O ( n ) O(n) O(n)的过此题
T2
- 这个是一道挺简单的一个贪心
- 从前往后扫,如果当前位比后面的要大,那么就删除当前位
- 当只能删除一次的时候,这个贪心很好证明,但是删除M次如何证明呢?
- 当从前往后扫删除时,这样的删法很显然是将删除的当前位的一个数字降低了,因为后面的数字比当前位要小,而最高位降低数字的大小很显然比最低位降低数字的大小要优,这也相当于每次都是最优解
- 持续M次即可
T3
一:
- 二分求最长上升子序列
- 听某位同学说可以用平衡树搞一搞
- 可能是我太菜了还是那么都不会…
二:
- 好像可以dp?
- d p i dp_i dpi表示以 a i a_i ai结尾的最长LIS
- d p i = m a x ( d p j ) + 1 dp_i = max(dp_j)+1 dpi=max(dpj)+1 当前仅当 a i − a j > 中 间 0 的 个 数 a_i - a_j > 中间0的个数 ai−aj>中间0的个数
- 设 s u m i sum_i sumi表示0的前缀和
- 有: a j − a i > s u m j − s u m i a_j-a_i>sum_j-sum_i aj−ai>sumj−sumi
- 移项后得: a j − s u m j > a i − s u m i a_j-sum_j>a_i-sum_i aj−sumj>ai−sumi
- ?变成了LIS??
- n l o g n 求 一 边 L I S 即 可 nlogn求一边LIS即可 nlogn求一边LIS即可
T4
- 挂了
T5
C 2 S = 4 ( a + b ) 2 ( a b ) 我 们 可 以 把 4 忽 略 = ( a 2 + 2 a b + b 2 ) ( a b ) 把 2 抛 掉 = a b + b a 对 勾 函 数 求 \frac {C^2} S \\ =\frac {4(a+b)^2}{(ab)} \\我们可以把4忽略 \\ =\frac{(a^2+2ab+b^2)}{(ab)} \\ 把2抛掉 \\=\frac ab + \frac ba\\对勾函数求 SC2=(ab)4(a+b)2我们可以把4忽略=(ab)(a2+2ab+b2)把2抛掉=ba+ab对勾函数求
哈夫曼树
给定n个权值作为n个叶子节点,构造一个二叉树,使该树的带权路径长度达到最小。
构造方法:合并果子
K叉哈夫曼树
维护两个队列,每次从两个队列的头上去元素,类似归并排序的实现方法,并将取的数之和作为一个新的元素添加到第二个队列的末尾