NOIP2016憤怒的小鳥

2021-08-17 22:20:42 字數 879 閱讀 6888

設dp[s]表示已經打了的豬的的序號組成的集合,那麼我們列舉乙個i表示這一次要打個豬,然後再列舉乙個j,表示這一次把i和j一起打掉,那麼預處理乙個bit陣列使得bit[i][j]表示以i和j的座標確定的拋物線可以打掉的所有的豬,那麼就由dp[s]+1轉移到了dp[s|bit[i][j]]了,最後的答案就是dp[2^n-1].

#include 

#define n 20

#define eps 1e-8

#define inf 0x3f3f3f3f

using

namespace

std;

int t,n,m;

int g[n][n],f[1

<<20]; //g存選擇豬i j f存狀壓結果

double x[n],y[n],a,b; //前向星存豬

bool same(double a,double b) //精度判重

int mymin(int a,int b)

f[0]=0; //邊界條件 乙隻都不打

int k=1

for(int j=1;j<=n;j++) // 每乙隻豬

if(!(i & (1

<<(j-1)))) // 能增加打掉的豬 i的狀態那個位置是0

if(same(x[k],x[j])) continue; //橫座標相同直接過不存在

f[i|g[j][k]]=mymin(f[i|g[j][k]],f[i]+1); //選取該條拋物線 或者加一條

} break;

} printf("%d\n",f[(1

<1]);

} return

0;}

NOIP 2016 憤怒的小鳥

題目描述 kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如y ax 2 bx的曲線,其中a,b是kiana指定的引數,且必須滿足a 0。當小鳥落回地面 即x軸 ...

NOIP2016 憤怒的小鳥

時間限制 1 sec 記憶體限制 128 mb kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如y ax 2 bx的曲線,其中a,b是kiana指定的引數,且必...

NOIP2016 憤怒的小鳥

這道題看到資料範圍,我們就知道 小於等於18,一定使用狀態壓縮,即o 2 n 乙個東西 在算一下,我們發現,像noip這種考試,一定會考卡常數的題,所以瞬間得出這道題的演算法是o 2 n n 2 cases 顯然這道題我們可以當做直線來做 y a x 2 b x可以合併同類項得y x a x b 那...