A数组
给出一个01数组,问这个数组至少去掉多少个数,相对位置不变,spa
而且要求:每个1后面的全部数都是1排序
要不把全部1去掉class
要不数组是0...01...1形式,这种只须要枚举1的位置,就好了时间
Bnew
有n个问题,每一个问题有k个子问题,1 <= n,k <= 45枚举
作出任何一个问题的第i个子问题须要t[i]时间,得1分
若是某个问题的k个问题所有解决了,还会再奖励1分
如今你有M的时间,0 <= M <= 2 * 10^9,问最多能得多少分
贪心
枚举解决了x个问题,得了x * (k + 1)分,把剩余的子问题按照t的大小排序,而后用剩余的时间贪心去作,看能作多少子问题,能得多少分
C
有一个数组,长度n,1 <= n <= 5000,元素多是负数,数组从0开始
sum(l,r)表示数组区间[l,r)的元素之和
如今要你找3个数,x,y,z,知足:
1.0 <= x <= y <=z <= n
2.sum(0,x) - sum(x,y) + sum(y,z) - sum(z,n)最大
注意,这道题目i == j时,sum(i,j)表示[i,i),没有元素,值为0
咱们枚举y的位置,把数组分红[0,y),[y,n),而后对2个部分都要找一个分隔点,其实就是2个相同的子问题
因此,先枚举y,对每一部分再求分隔点就能够了
D
有一个n * m的矩阵,开始时矩阵元素都为0,有q个操做,第i个操做xi,yi,ti,表示从ti时间开始a[xi][yi] = 1
问最少什么时间,矩阵有一个k * k的子矩阵,子矩阵全为1
二分时间,就好了
E
题意不想说了
树dp,就好了
F
给出一个数组
f(l,r) = 数组[l,r]区间中的不一样的数的个数,如今随机选择l,r,求f(l,r)的指望
1.从题意看,if l != r,则选到l,r的几率是2 / n / n if l == r,则选到l,r的几率是1 / n / n
2.pre[i]记录a[i]上一次出现的位置,直接算出每个位置对指望的贡献
每个位置对指望的贡献 = 这个位置有贡献的几率 * 1