NOIP 提高組2016 憤怒的小鳥

2022-04-30 03:21:07 字數 937 閱讀 2050

【題意】universal online judge

【演算法】狀態壓縮型dp

【題解】看資料範圍大概能猜到是狀壓了。

根據三點確定一條拋物線,列舉兩個點之間的拋物線,再列舉有多少點在拋物線上(壓縮為狀態c),這樣預處理出至多n*n/2+n條拋物線。(注意加上只經過一點的拋物線)

然後f[i]表示豬的消滅狀態為i的最小步數,轉移方程:f[i&c[j]]=min(f[i&c[j]],f[i]+1)。

#include#include

#include

#include

#include

using

namespace

std;

intread()while(isdigit(c=getchar()));

return s*t;

}const

int maxn=300000,maxn=500

;const

double eps=1e-8

;int

c[maxn],f[maxn],n,tot,qaq;

double x[30],y[30

],a[maxn],b[maxn];

intmain()

c[tot]=(1

<1

<

for(int k=j+1;kif(fabs(a[tot]*x[k]*x[k]+b[tot]*x[k]-y[k])}}

memset(f,

0x3f,sizeof

(f));

f[0]=0

;

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

}printf(

"%d\n

",f[(1

<1

]); }

return0;

}

view code

NOIp2016提高組 憤怒的小鳥

題目大意 平面直角座標系的第一象限有n n 18 個點,你可以每次給出乙個形如y ax 2 bx的函式把經過這條函式的點消掉,問消掉所有的點至少要多少函式?思路 列舉每兩個點對,可以唯一確定一條函式,再列舉第三個點,判斷一下是否會經過這條函式。狀態壓縮一下記錄每條函式能消掉那些點。然後就是乙個簡單的...

憤怒的小鳥(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,再列舉兩隻...