【題意】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#includeview code#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;
}
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,再列舉兩隻...