51nod算法马拉松23(飞越愚人节)

这是拖了多久的题解…什么时候我也有拖延症了..

A. 不会..

B. 设生成的数和的期望为 f ,n个数的平均数为x
那么有 f=x+(1mn)f
所以 f=xnm

C. 可以发现,一条路径上两个不同的城市x,y的a[x] mod a[y]的最大值即是a的次大值,于是只要求出首都到每个城市所有路径次大值的最大值
先缩环,然后做一个拓扑排序,维护到每个点的所有路径的最大值,次大值,每个点的答案,
对于一条边 x>y ,若 ansyansx
则要么 x 环的最大值作为路径上的次大值贡献到答案,
要么x环上的最大值作为路径上的最大值,到 y 的路径上的最大值作为路径上的次大值贡献到答案,
或者最大值相等,两者次大值的较大值贡献到答案

D. 求最短路为i的方案数,考虑到每次不能往左走,而且行数 n 很小,可以考虑从左到右做一个状压DP,因为要维护最短路为i的方案数,又易知相邻点的最短路差 1 ,可以定义状态 f[i][k][l] 为DP到第 i 列第n行最短路为k,一个三进制数 l 表示第n11行和上一行最短路的差分值,搜索预处理一下状态之间的转移,第一维滚动就行了

E. 绝对值符号不拆留着过年…
莫队,将绝对值符号拆掉之后,推一下柿子,发现树状数组维护个数、下标和、a[i]的和、i*a[i]的和,就可以 O(logn) 移动两端点,然后卡一下常…
题解是一个很玄妙的分块?感觉常数和一个log也不会差太远…

F. 用到了洲阁筛的思想吧,挺厉害的一个DP(详见官方题解吧…)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值