求解以浮点数为系数的二元一次方程 & 状压 dp

written on 2022-07-27

简单题,然而考场保龄

题目传送门(愤怒的小鸟)

首先说一下标题的第一个问题,这个问题害的我敲的爆搜代码本该有的 \(65pts\) 一分也没有。

考场上的求解思路是将浮点数转化为整数后,运用加减消元然后解出抛物线系数 \(A,B\),但是精度误差太大,导致直接保龄!

讲一下正解,观察两个式子:

\[A\times k1+B\times p1=y1 \]

\[A\times k2+B\times p2=y2 \]

我们希望让原式只存在一个未知数,所以呢考虑用减法消去 \(B\)。为一式乘以 \(p2\),二式乘以 \(p1\),然后作差便能消去 \(B\),使原式只含 \(A\),然后移项然后除一下就能得到 \(A\) 了,然后代入解出 \(B\) 即可。

以上就是求解以浮点数为系数的二元一次方程的一般通用方法,精度误差较小。

然后这题的正解是状压。一般来说,题目的范围要是 \(n\leq 12\),那么可以考虑直接搜索剪枝,但是 \(n\leq 16/18/20\) 这样的情况就要用状压,这题的状压显然要设 \(f_i\) 表示当前杀死小猪状态为 \(i\) 的最小使用小鸟数,然后枚举接下来一次能杀死的小猪集合。这个集合我们可以预处理,先 \(O(n^2)\) 任意选出两只小猪,求出抛物线,然后判断哪些小猪也在这个抛物线上,这样做到 \(O(n^3)\) 预处理。然后 dp 时 \(O(n^2)\) 枚举集合,总时间复杂度为 \(O(T\times n^2\cdot 2^n)\)。然后优化一下是可以做到 \(O(n)\) 转移的,找到第一个空的位置,然后转移即可。但是强烈建议考场上不要加这个优化,因为不加优化测了大样例,跑的还是挺快的,加了还可能出现一些玄学错误。

posted @ 2022-07-31 22:37  Freshair_qprt  阅读(38)  评论(0编辑  收藏  举报