期望公式很好推,要注意空的盒子總共被取了n+1次,而不是n次。
但是在n很大的時候公式中的組合數會巨大,而且p的n次方也會非常小。這樣就要像乙個方法壓縮他們,就是對這些數取log,然後再用exp函式還原(e的n次方)
對於組合數,先預處理出1到2e5這些數階乘的log,再用這些階乘去算組合數。
對於p的n次方,它的log等於n*log(p)
**:#include #include #include #include using namespace std;
#include #define maxn 400005
double f[maxn];
double c[maxn];
int n;
double p;
void init()
}double pow(double p,int n)
int main(){
init();
int kase=1;
while(~scanf("%d%lf",&n,&p)){
for(int i=0;i
hdu 4770 狀壓 列舉
長記性了,以後對大陣列初始化要注意了!140ms 原來是對vis陣列進行每次初始化,每次初始化要200 200的複雜度 一直超時,發現沒必要這樣,直接標記點就行了,只需要乙個15的陣列用來標記,vis陣列用來對映座標就行了 然後就是暴力加了一點優化,下面沒有加優化。include include d...
HDU2489 狀壓列舉
題意 給你n個點的圖,然後讓你在圖里挑m個點,達到sumedge sumnode最小 思路 由於資料範圍小,狀壓列舉符合m個點的狀態,我是用vactor存了結點位置,也記錄了結點的sum值,然後跑一發最小生成樹就可以知道sumedge,這裡判斷可以利用乘法,然後更新乙個狀態就好了 include u...
HDU2489 狀壓列舉
題意 給你n個點的圖,然後讓你在圖里挑m個點,達到sumedge sumnode最小 思路 由於資料範圍小,狀壓列舉符合m個點的狀態,我是用vactor存了結點位置,也記錄了結點的sum值,然後跑一發最小生成樹就可以知道sumedge,這裡判斷可以利用乘法,然後更新乙個狀態就好了 include u...