【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)
題干:
osu 是一款群眾喜聞樂見的休閑軟件。?
我們可以把osu的規(guī)則簡化與改編成以下的樣子:?
一共有n次操作,每次操作只有成功與失敗之分,成功對應(yīng)1,失敗對應(yīng)0,n次操作對應(yīng)為1個(gè)長度為n的01串。在這個(gè)串中連續(xù)的 X個(gè)1可以貢獻(xiàn)X^3 的分?jǐn)?shù),這x個(gè)1不能被其他連續(xù)的1所包含(也就是極長的一串1,具體見樣例解釋)?
現(xiàn)在給出n,以及每個(gè)操作的成功率,請你輸出期望分?jǐn)?shù),輸出四舍五入后保留1位小數(shù)。?
?
Input
第一行有一個(gè)正整數(shù)n,表示操作個(gè)數(shù)。接下去n行每行有一個(gè)[0,1]之間的實(shí)數(shù),表示每個(gè)操作的成功率。?
?
Output
只有一個(gè)實(shí)數(shù),表示答案。答案四舍五入后保留1位小數(shù)。?
?
Sample Input
3 0.5 0.5 0.5
Sample Output
6.0
Hint
?
【樣例說明】?
?
000分?jǐn)?shù)為0,001分?jǐn)?shù)為1,010分?jǐn)?shù)為1,100分?jǐn)?shù)為1,101分?jǐn)?shù)為2,110分?jǐn)?shù)為8,011分?jǐn)?shù)為8,111分?jǐn)?shù)為27,總和為48,期望為48/8=6.0?
?
N<=100000
題目大意:
給定一個(gè)序列,每個(gè)位置為 o?的幾率為?p_i??,為 x?的幾率為?1 - p_i??。對于一個(gè) ox?序列,連續(xù)?x?長度的 o?會得到?x^3???的收益,問最終得到的ox?序列的期望收益是多少?
解題報(bào)告:
? 在上一個(gè)題(【BZOJ - 3450】)的基礎(chǔ)上,期望是x^3,做法如下:
第一步依舊是展開:
我們只需要維護(hù)?l1[i]為以?i為結(jié)尾的連續(xù)期望長度,l?2??[i]?為以?i?為結(jié)尾的連續(xù)長度的平方? 的期望。
,所以l2不能直接用l1得出。
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e5 + 5; int n; double p; double dp[MAX],l1[MAX],l2[MAX]; int main() {cin>>n;for(int i = 1; i<=n; i++) {scanf("%lf",&p);dp[i] = (3*l2[i-1]+3*l1[i-1]+1)*p;l1[i] = (l1[i-1]+1)*p;l2[i] = (l2[i-1]+(l1[i-1]*2+1))*p; }double ans = 0;for(int i = 1; i<=n; i++) ans += dp[i];printf("%.1f\n",ans);return 0 ; }?
總結(jié)
以上是生活随笔為你收集整理的【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 700MHz 5G黄金频段来了!中国广电
- 下一篇: 【牛客 - 331J】炫酷数学(打表猜结