考试总结 模拟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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值