設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 那...