【洛谷P2831】[NOIP2016]愤怒的小鸟】的更多相关文章

题目:https://www.luogu.org/problemnew/show/P2831 状压dp.跑得很慢.(n^2*2^n) 注意只打一只猪的情况. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; ;; <<Lm)+],lm,tot,tp,list[Lm*…
洛谷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…
题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/details/53427248 树上差分真好. 首先要发现向上和向下的……是定值.然后想到可以差分. 本题的差分略特殊之处在于它的对象是一条连到根的链.把链上的差分值记到非根的端点上. 总之看明白TJ之后感觉真精妙. 而且 从各种中选自己需要的 只需把所有都加进桶中! #include<iostream>…
愤怒的小鸟 题目链接 本来是刷状压DP的,然而不会.. 搜索是比较好想的,直接dfs就行了 我们可以知道两只猪确定一条抛物线 依次处理每一只猪,有以下几种方法: 1.先看已经建立的抛物线是否能打到这只猪 2.若1不可行,将这只猪与之前单着的猪配对,建抛物线 3.将这只猪单着,等待以后配对(若配不上,直接建一个只打一头猪的抛物线) 代码: #include<iostream> #include<cstring> #include<cstdio> using namespa…
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 只绿色…
这三道题一起做,有一点心得吧. 愤怒的小鸟,一眼看上去是爆搜,但是实现起来有困难(我打了0分出来). 还有一种解法是状压DP. 抛物线一共只有那么多条,我们枚举抛物线(枚举两个点),这样就能够预处理出b[i][j] 表示过点i,j的抛物线经过的点(状压). 然后写了个记忆化搜索,枚举每个状态是通过哪个抛物线转移而来(可能转移后比现状态经过的点要多,但是不影响答案正确性) 那么就这样A了... 论状态压缩的多种应用——篮球比赛2: 这题也是状压DP,但是DP的状态设计很NB: f[i][sta]表…
题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一条抛物线,选能顺便打掉最多的那个: 然后连样例都过不了... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #def…
传送门 状压一眼题. 直接f[i]f[i]f[i]表示未选择状态为iii时的最小次数. 然后考虑现在怎么转移. 显然可以直接枚举消掉某一个点或者某两个点,复杂度O(n22n)O(n^22^n)O(n22n) 由于这个集合里面的所有点最终都会被消掉,因此顺序并不重要. 于是可以强制这一步会消掉lowbit(i)lowbit(i)lowbit(i) 那么当前有两个选择: 只消掉lowbit(i)lowbit(i)lowbit(i) 还会消掉其它的. 第一种直接递归,第二种可以预处理数组f[i][j]…
题意 题目链接 Sol 这题....我样例没过就A了??..算了,就当是样例卡精度吧.. 直接状压dp一下,\(f[sta]\)表示干掉\(sta\)这个集合里面的鸟的最小操作数 转移的时候判断一下一次能干掉多少鸟.. #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 100001; inline int read() { char c = getchar(); int x =…
[题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstdio> #include<cstring> #include<algorithm> #define LL long long #define rg register #define N 2010 using namespace std; ][],c[N],d[N]; ],k[N]…