T1
问题
给你一个长度为n的数字,可以删掉其中的m位,使得结果数字最小.
解法
- 首先考虑m = 1的情况.此时我们为了降低字典序,显然要从前往后找到第一个下降的数字,然后删掉它.这样起到了降低字典序的效果.然后考虑一般情况,其实相当于m次这个过程.这体现了贪心的核心:单步最优解导致全局最优解.
- 我们删去了m个数字,这些数字也可以组成一个序列.如果当前贪心不是最优解,那与最优解相比,肯定与最优解相比至少会有一对数,在原序列中位置不同.如果当前贪心删去的数字位置在最优解的后面,那就说明最优解比贪心删去的数字小或者相等,显然这样的话我们删去最优解更优而不是删去当前贪心的位置.同样,如果在前面也可以证明我们的贪心就是最优解.
该问题也可以转化为取出序列中的n-m个数字.那么贪心策略就是在前m+1位中选最小值,然后前面删掉.然后重复这个过程.因为只需要保证最后有足够的数可以选就行了,所以选第一个时,只要保证最后有至少n-m-1个数就行了.以此类推.
T2
问题
给你一个长度为n的序列,其中的0可以视为任何正整数,求它的最长上升子序列.
解法
设dp[i]表示以a[i]结尾的lis的长度.(a[i]!=0)
dp[i] = max{dp[j]} + 1,其中a[i]-a[j]>x(x为[i,j]之间0的个数).
0的个数可以用前缀和优化.T3
问题
给出一个长度为n的序列a,其中每个数都可以看做一个k位二进制数,你可以将序列中任意一个数按位取反,目标是使得其中异或和不为0的区间尽可能的多
n<=2e5,k<=30解法
区间的异或和可以转化成前缀和问题,xorsum[i,j] = sum[j] xor sum[i - 1].........
T4
问题
给出一些边,选出四条边组成矩形,最小化周长的平方与面积的商.
解法
众所周知,周长确定的情况下,越接近正方形面积越大,所以就选择最接近的两条边就好啦.
具体证明的话,就表示成a / b + b / a最小,也就是x + 1 / x最小,由双钩函数的性质可以知道,比例越接近1越合适.
T5
问题
给定一个n个节点的树,点权是2^i,现在在保证连通性的情况下,从树中删去k个点,最大化剩余节点点权和.
1e6,3s.
解法
显然点i的权值比Σa[1,i-1]还要大.所以我们选择n号点作为根,然后贪心地判断n-1,n-2..能不能被保留.