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