考试总结 模拟29

心得:

提高要求,真的是大众分!!!

T1dalao们10分钟切完,而我搞了1小时,T2只会打暴力,虽然思考方向没错,但是没想出来,T3也是只会打暴力,考场找规律也是可行的

题解

T2「前缀和」「单调栈」

首先离散一下,对于离散后的数组,考虑将每个数作为最大值的次数记录到桶中

只需要知道每一位作为最大值的区间就行,用单调递减的栈实现,注意对于相等的点,不要加重

然后就可以求前缀和并$O(1)$查询,还要注意考虑查询的k是不是在原数组中存在

int:2e9!!!没开ll卡了好久

T3「动态规划」

f[i]:长度为i-1的排列们,搞成符合要求的所需代价和

将i插入到i-1的排列中,挤到最后的第i位可以是1~i,

若第i位是i,那么只需要将前i-1进行操作即可

若第i位是1~i-1,那么就可以看成前i-1个数先排成有序的,代价f[i-1],然后把最后一位移到它该在的位置,由于前i-1位有(i-1)!种排列,还要乘上它

定义g[k]为最后一位是k,回到该在的位置的代价

g[1]=1,g[2]就是在回到1的基础上再加一步即g[2]=g[1]+1,g[3]就是在回到2的基础上再加一步即g[3]=g[2]+g[1]+1

举个例子12453  31245 13245 21345(到这就是g[2]) 12345一共4步

这样就是$f[i]=f[i-1]+sum(f[i-1]+fac[i-1]*g[k])(1<=k<i)$

发现$g[k]=2^{k-1}$使用等比数列求和优化成O(n^2)

愿你在迷茫时,记起自己的珍贵。
原文地址:https://www.cnblogs.com/casun547/p/11396134.html