BZOJ 4828: [Hnoi2017]大佬(状态搜索)

题目大意

挺多操作的,自己看
原题链接

分析

首先求出最大怼大佬的天数,因为补血和攻击操作是没有关系的,所以可以DP求出最多怼大佬多少天。

然后关于F和T的关系处理是很巧妙地,爆搜!!,爆搜出来状态数并不多,处理出来所有可能的值以及所需要的天数

然后用一个他们叫tow-pointer的神秘算法。。。其实就是两个指针

因为不能让大佬的自信为负数,所以要保证两次直接怼的操作不能让,就用左指针从小到大,右指针随之减小,在这之前还要加一个0伤害0天数的不怼大佬情况

设大佬血量为D,伤害,天数为(d,f),可以怼大佬的总天数为C
则D-d1-d2>=0
然后有可行解则:D-d1-d1<=C-f1-f2
那么就是D-C<=(d1-f1)+(d2-f2),因此设置辅助数组g[i]表示前i个元素dj-fj的最大值,D-C<=g(point1)+g(point2)即可

注意指针边界问题即可

代码

没有这种东西

你可能感兴趣的:(BZOJ,状态搜索,不打代码系列)