题解 P2831 【愤怒的小鸟】】的更多相关文章

P2831愤怒的小鸟 题目描述 \(Kiana\) 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 \((0,0)\) 处,每次 \(Kiana\) 可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 \(y=a*x^2+b*x\) 的曲线,其中 \(a,b\) 是 \(Kiana\) 指定的参数,且必须满足 \(a<0\),\(a,b\) 都是实数. 当小鸟落回地面(即 \(x\) 轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第…
洛谷P2831 愤怒的小鸟 原题链接 题解 首先简单数学公式送上. \(ax_1^2+bx_1=y_1\) \(ax_2^2+bx_2=y_2\) \(ax_1^2x_2+bx_1x_2=y_1x_2\) \(ax_2^2x_1+bx_2x_1=y_2x_1\) \(a=(y_1x_2-y_2x_1)/x_1x_2(x_1-x_2)\) \(b=(y_1-ax_1^2)/x_1\) 不用证明吧... 85分 状态压缩.每次枚举两个点计算抛物线,然后消除这条线上所有点,再转移. // It is…
P2831 愤怒的小鸟 从 \((0, 0)\) 发射一只鸟, 轨迹满足抛物线, 问最少几只鸟可以打完 \(n <= 18\) 只猪 错误日志: 处理抛物线数组没有初始化 Solution 数据范围识状压 挺好想的状压dp 对于每只猪考虑两种情况: 自己被单独打下来或者被其他抛物线经过打下来 现在已经有一个确定点 \((0 ,0)\) 再加一只猪, 两个点无法确定一条抛物线 也就是说这条抛物线是可以给你自己规划的 也也就是说自己被单独打下来一定可行 不过能打多一点会更优 三点确定抛物线 我们暴力…
P2831 愤怒的小鸟 我们先预处理出每个猪两两之间(设为$u,v$)和原点三点确定的抛物线(当两只猪横坐标相等时显然无解) 处理出$u,v$确定的抛物线一共可以经过多少点,记为$lines[u][v]$ 设$f[i]$表示已经被消灭的猪的集合为二进制表示为$i$时,需要的最小抛物线数 显然$f[0]=0$ $f[i|(1<<(u-1))]=min(f[i|(1<<(u-1)],f[i]+1)$(一条抛物线只串一个点) $f[i|lines[u][v]]=min(f[i|lines…
P2831 愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 y=ax^2+bxy=ax2+bx 的曲线,其中 a,ba,b 是Kiana 指定的参数,且必须满足 a < 0a<0,a,ba,b 都是实数. 当小鸟落回地面(即 xx 轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有 nn 只绿色…
P2831 愤怒的小鸟 抛物线过原点,只要再找两个就能确定抛物线: 处理出两两之间的抛物线能过哪些点,状态压缩: 但是直接枚举每一条抛物线常数太大会T,所以我们需要预处理一个low_bit表示当前状态下第一个没选的,即是二进制下第一个不是1的位置: 因为我们早晚都要把它变成1,所以先处理他就可以达到要求: 注意精度问题: #include<cmath> #include<cstdio> #include<cstring> #include<algorithm>…
P2831 愤怒的小鸟 题意 题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于\((0,0)\)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如\(y=ax^2+bx\)的曲线,其中\(a,b\)是Kiana指定的参数,且必须满足\(a<0\),\(a,b\)都是实数. 当小鸟落回地面(即\(x\)轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有\(n\)只绿色的小猪,其中第\(i\)…
题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. 事实上,这题搜索和状压DP都是能做的. (因为搜索在我心中留下了阴影(斗地主),所以在这里,我讲状压DP的做法) 根据我们以往设计状压DP的经验,我们可以很轻松地设计这一题的状态: 设f[i]表示打下的猪猪的状态为i的方案数,(状态在这里用二进制方式来表示,例如:00101表示打下了第1和第3只猪) 那…
题目链接:https://www.luogu.org/problemnew/show/P2831 写点做题总结:dp,搜索,重在设计状态,状态设的好,转移起来也方便. 对于一条抛物线,三点确定.(0,0)是固定的,所以我们一条抛物线要用两只猪确定.再多的猪就只能用来判断是不是在这条抛物线上了. 于是我们把猪分成两种:在已有方程里的猪,单独的猪还没有确定方程. 那么对于一只猪,就会有被以前方程覆盖/和前面单独的猪构成新抛物线/自己单独. #include <cmath> #include <…
题目 我的天,这题是真的卡精度...... 主要是精度很不好处理,经本蒟蒻测验,精度在\(10^{-6}\)会比较好优雅 [分析] 对于这种某个变量特别小\((\leq 31)\)的题目,本蒟蒻第一反应就是状压 对于某个抛物线,一定要打到起码一个小猪(不然不如不要这一条抛物线) 有人觉得最少会打掉两只小猪的,可以仔细想一下,万一\(a \geq 0\)呢...... 好的,我们继续 那么,我们可以这么考虑,枚举每一只小猪的坐标 首先,有一条抛物线是只过它的 其次,再枚举其他小猪,算出抛物线方程(…