[关闭]
@happyforever 2018-11-01T02:15:32.000000Z 字数 1674 阅读 506

10.25听课笔记

清北学堂 笔记


image.png

由题目可以得出:每次最多打过只怪兽。
三种方案
1. 枚举所有可能
2. 推个公式
表示打完i只怪兽的概率。
所以只要求出就是答案。问题就转换成了怎么求(不一定挂掉)。
第一种可能:
每次一定从两只怪兽中选一只怪兽来打才打得过。所以对于前只怪兽,有种方案数。对于后只怪兽 有种。所以总的方案数是,即
第二种可能:
如果说明第只一定打。
说明一定有一只怪兽不能打,枚举第只不打,
如果第只满足条件进行如下讨论:
次战斗,每次还是两种可能。
次战斗,每次都有一种可能。
那所有的可能就是(所有满足条件的)
但是发现还是枚举,枚举的,所以继续优化。
可以发现一定一开始都是第一种可能,到某个为止出现了第二种可能。令表示第一次碰到了第二种可能,其后一定都是第二种可能。当时,先求出满足条件的算出
增减\sum_{j=1}^{i+1}a[j]\sum_{j=1}^{i+1}-a[k]mxixi2^{j-1}\times n!(n-i)!)在改变,所以可以看做:
的增加在变化,第二个很好维护,所以任务就是维护第一个。
因为增加时有些不符合条件,所以只要找出不符合条件的,从答案中减去就可以了。
使用小根堆,维护最小的每次弹出最小的,判断是否符合条件。
总复杂度

3.DP
表示打完只怪兽并且第只没被打的概率。因为前次选怪兽,一定是能量为的这么只怪兽中选只。的时间复杂度。
如果。考虑压维,发现第二维很难压,第一维也很难压,所以说明p无法通过压维进行优化。因而考虑其他做法。
那么考虑方案

image.png
枚举:打掉那些怪兽,把怪兽看做空地,看起点和终点是否在同一联通快,如果在,就捡起能捡起的所有的血瓶,所以剩下的就是判断中途能否不挂掉。(贪心可以过,枚举全排列会TLE
表示打这个状态的怪兽,打完还有多少血。
枚举最后一只打的是什么,若是。可以来更新
大于打扣的血,就能打过,否则不能。若可以,加上附近能捡的所有血瓶。

image.png
举一个例子:
固定时,随着的增加有以下三种情况
1. 形成了一段新的长度为1的区间(++)。
2. 把相邻的区间合并起来(--)
3. 从原来的一段中,延伸了一位(不变)。
计算出当时的值。当增加时,计算三段不同情况的的分割点,对于每一段执行区间加或减操作,中间不管。线段树维护。
也就是说,随着的增加,线段树中,第个叶子记录当时,标记后能形成多少区间,随着的增减,能得到三段区间,第一段加,第二段不变,第三段减。
对于所有的,计算存在多少叶子值,把个数累加进答案。
因为所有的数都是正整数,所以可以用线段树维护最小值和最小值的个数,次小值和次小值的个数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注