LnOI2019 加特林輪盤賭 DP,概率期望

2022-04-10 03:36:07 字數 1513 閱讀 2302

題目鏈結

首先特判掉\(p=0/1\)的情況...

先考慮如果\(k=1\)怎麼做到\(n^2\)的時間複雜度

設\(f[i]\)表示有\(i\)個人,\(k=1\)的時候倖存的概率

設\(g[i][j]\)表示\(i\)個人每個人挨一下恰好死\(j\)個人的概率

我們就可以列出轉移方程:

\[f[i]=(1-p)\sum_^+f[i]*g[i][0]

\]把含有\(f[i]\)的項全部移到左邊,化簡得:

\[f[i]=\frac^}

\]於是我們就可以愉快地\(dp\)啦

陣列\(g\)存不下來,\(dp\)的時候動態更新就好啦

如果\(k!=1\)怎麼辦呢?

我們可以把\(1\sim k-1\)的這些人先打一遍,對於每種剩下的人數分別計算答案,然後按照概率加起來就好了

\(double\)運算常數很大,比賽時一直\(tle\)在\(65\)分,關於這個常數的問題有兩種解決方法:

看了看排行榜,好像有\(o(n)\)的做法?

#include#include#include#include#include#include#include#include#include#define qmax(x,y) (x=max(x,y))

#define qmin(x,y) (x=min(x,y))

#define mp(x,y) make_pair(x,y)

using namespace std;

typedef long long ll;

typedef pairpii;

inline int read()

while(ch>='0'&&ch<='9')

ans=ans*10+ch-'0',ch=getchar();

return ans*fh;

}const ll maxn=1e4+100,w=2e9;

int n,k;

ll p,g[maxn],f[maxn],pp[maxn];

double php;

int main()

p=php*w;

int x=k-1;

f[1]=1*w,g[0]=w-p,g[1]=p;

if(x==1)

for(int j=0;j<=n;j++)

pp[j]=g[j];

for(int i=2;i<=n;i++)

for(;j;j--) g[j]=(g[j-1]*p+g[j]*(w-p))/w;

(g[0]*=w-p)/=w;

if(i==x)

for(int j=0;j<=n;j++)

pp[j]=g[j];

(f[i]*=w)/=w-g[0];

} if(x==0)

double ans=0;

for(int i=0;i<=x;i++)

printf("%.12lf\n",ans*1.0/w);

return 0;

}

LNOI2014 LCA 解題報告

對於一棵 n 個節點的樹,給出 m 次詢問,每次給出 l,r,x 求 sum limits r depth lca i,x n,m le 5 times 10 4 1 le l le r le n x le n 一道不錯的題目。說明有時候用一些其他的做法求乙個簡單的東西也可以幫助思考。對於我,求lc...

九省LNOI2018退役記

立個flag不會退役。day 0 水一發。大連大學的鍵盤敲起來就跟敲紙似的。膜拜要進隊的gqh,yxd,sjq。都進啦2333 高斯消元,高原反應,分麾下治 給我這只弱雞燒根香。今天晚上爭取把板子敲完。day 1 拿到題的一瞬間是mengbi的。t1暴力出奇蹟?t2很 妙?t3不可做,恩。然後寫了一...

物件導向部分 201

小夥伴們,還在為不知道怎麼下手而頭疼嗎,我們程式競賽協會來幫你們啦 啦啦啦。另外,如果有對程式設計含有濃厚興趣的同學,我們隨時歡迎你們的加入喲 策劃 譚兆飛 程式設計 管懷文 協助 一號人員要求給她打碼 乾脆二號也打碼好了o o 其實只是提供了題目啦 物件導向部分 201 include inclu...