題目大意:
平面直角座標系的第一象限有n(n<=18)個點,你可以每次給出乙個形如y=ax^2+bx的函式把經過這條函式的點消掉,問消掉所有的點至少要多少函式?
思路:列舉每兩個點對,可以唯一確定一條函式,再列舉第三個點,判斷一下是否會經過這條函式。
狀態壓縮一下記錄每條函式能消掉那些點。
然後就是乙個簡單的狀壓dp。
一開始由於把fabs打成了abs,樣例都過不去,調了半個下午。
洛谷上隨便a,uoj上被extra資料hack掉了,把eps從1e-7改成1e-10就a了。
1 #include2 #include3 #include4 #include5 inline intgetint()
12const
int n=18;13
const
double eps=1e-10;14
struct
point ;
17point p[n];
18int sit[n*n],s;
19int f[1
<20 inline double pow(const
double &x)
23int
main()
29for(register int i=0;i)
32 s=n;
33for(register int i=0;i)
43 s++;44}
45}46for(register int i=1;i<(1
<)
49for(register int i=0;i<(1
<) 53}
54 printf("
%d\n
",f[(1
<1
]);55}56
return0;
57 }
憤怒的小鳥(NOIP2016提高組Day2T3)
題目描述 kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如y ax 2 bx的曲線,其中a,b是kiana指定的引數,且必須滿足a 0。當小鳥落回地面 即x軸 ...
NOIP 2016 提高組 Day2 憤怒的小鳥
原理我懂了 注意到資料範圍 n 18 有什麼演算法?暴力?狀壓!狀壓dp,對於每只豬1和0表示是否被打掉了 設f s 為當前狀態的最小步數 我們知道,三個點可以確定乙個拋物線 已知乙個點是原點,那麼再來兩個點就可以確定乙個拋物線,設點i和點j確定的拋物線表示為 i,j 每次列舉乙個狀態s,再列舉兩隻...
NOIP2016提高組day2 憤怒的小鳥
kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如 y ax2 bx 的曲線,其中 a,b 是kiana指定的引數,且必須 滿足 a 0 當小鳥落回地面 即 x ...