n
nn個點,每次可以射掉在函式y=a
x2+b
xy=ax^2+bx
y=ax2+
bx上的點(a,b
a,ba,
b自定但是要求a
<
0a<0
a<
0)。求最少射擊次數。
考慮狀壓,我們發現如果一次射掉兩個或以上的點那麼一定是一條固定的線(如果a≥0
a\geq 0
a≥0的話就沒有了)。計算cov
eri,
jcover_
coveri
,j表示如果同時射掉i
ii和j
jj會射掉的點集。
這樣就是o(t
2nn2
)o(t2^nn^2)
o(t2nn
2)的,無法勝任本題,考慮如何優化。
我們發現對於乙個在目前狀態中沒有射掉的點x
xx,如果先射掉別的點再射掉他其實是一樣的。所有我們固定每次先射掉編號最小的沒有射掉的點即可。時間複雜度o(t
2nn)
o(t2^nn)
o(t2nn
)
#include
#include
#include
#include
using
namespace std;
const
int n=20;
const
double eps=
1e-8
;int t,n,m,ms,f[
1<,cover[n]
[n];
double a,b,x[n]
,y[n]
;void
solve
(double a1,
double b1,
double c1,
double a2,
double b2,
double c2)
intmain()
ms=1<=0
;for
(int i=
0;i)printf
("%d\n"
,f[ms-1]
);}}
洛谷P2831 憤怒的小鳥 狀壓dp
題目鏈結 這題。我樣例沒過就a了?算了,就當是樣例卡精度吧。直接狀壓dp一下,f sta 表示乾掉 sta 這個集合裡面的鳥的最小運算元 轉移的時候判斷一下一次能乾掉多少鳥。include define ll long long using namespace std const int maxn ...
洛谷 P2831 憤怒的小鳥 狀壓DP
一.浮點數判相等 二.拋物線的判斷 題目中的拋物線有兩個未知數,在正常情況下,每兩點便可確定一條拋物線,但以下情況除外 1.兩點所在的直線經過原點 2.兩點橫座標相等 3.a 0 注 本題可用隨機化。include include include int para 650 int tot defin...
洛谷P2831 憤怒的小鳥 貪心?狀壓DP
題目 一開始想 n 3 貪心來著 先按 x 排個序,那麼第乙個不就一定要打了麼?在列舉後面某乙個,和它形成一條拋物線,選能順便打掉最多的那個 然後連樣例都過不了.include include include include include define eps 1e 9 using namespa...