洛谷p2831憤怒的小鳥

2021-08-07 14:34:28 字數 647 閱讀 9723

原題

每個豬的位置不同,所以不能簡單的表示出狀態,all[i]表示第i個拋物線打掉了哪些豬,其值本身儲存狀態(二進位制),只需要找所有有用的拋物線,然後狀壓f[i]表示i狀態下最少用掉的鳥,轉移方程見**。

其中的m可以用來優化。**雖然長,但是比較好懂。

#include#include#include#include#include#includeusing namespace std;

int judge(double x,double y)

int t,f[1<<18];

struct doita[19];

struct nodeb[19];int all[19];

double cmp(doit a,doit b)

if(p==2)

for(int i=1;i<=n;++i)

cin>>a[i-1].x>>a[i-1].y;

sort(a,a+n,cmp);

f[0]=0;int tot;

for(int i=tot=0;i=0) continue;all[tot]=0;

all[tot]|=1<

洛谷 P2831 憤怒的小鳥

kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如 當小鳥落回地面 即x軸 時,它就會瞬間消失。在遊戲的某個關卡裡,平面的第一象限中有n只綠色的小豬,其中第i只小...

洛谷 P2831 憤怒的小鳥

狀壓dp text dpn 18 n leq 18 n 18 不是暴搜就是狀壓,因為我jio jioji o得狀壓會比較好理解,所以就寫一篇狀壓的題解叭 首先我們要預處理出經過任意兩點的拋物線可以擊中的小豬有哪些,可以用lin e i j line i j line i j 來表示經過i,j i,j...

洛谷P2831 憤怒的小鳥

題目 狀壓dp。直接列舉二進位制數表示當前豬有沒有被消滅的狀態。最終答案的幾條拋物線必定至少撞到乙個豬。而且兩頭豬確定一條拋物線,可以列舉兩頭豬,分別求出他們的拋物線所消滅豬的狀態,然後可以用類似揹包的方法轉移dp。有方程 dp i 當前拋物線的狀態 min dp i 當前拋物線的狀態 dp i 1...