T1
[dp]
以时间为关键字先排序。
F[i]表示到t[i]时刻,并且尽量拦截对应的子弹,最多可以拦到几发子弹,在自身没有死掉的情况下。如果向后转移时,前面多个点可以拦截的子弹数目都相同,那么选择时间最靠后的一个。
注意有些子弹根本无法拦截,所以初值赋值为极小值。
If(D(i,j) <= t[j]-t[i] /*可以选择*/|| (m1 – (t[i]-f[i])*d) < 0/*必须选择*/)f[i] = max(f[i],f[j] + 1);
并且在中途不会死亡的情况下,尽量靠后选择,取max。
T2
[数学,二分]
对于每个x[i],x0取到x[i]的时候单个贡献取到最小值,非x[i]时成单增或单减,其函数图像类似于二次函数y = a*x^2。其导函数为单增,易知对于每个x[i]来讲,x0在实数范围都是单增的。那么我们可以对于x0进行二分,每个导函数进行相加比较,求出取到贡献最小的x0。
T3
[并查集]
将一样强的炮台放入一个并查集中,如果有炮台比并查集中的炮台强,则并查集中的炮台全部不可行。并查集扫完之后再判断可行炮台的数量。