WJMZBMR打osu! / Easy,洛谷P1365,期望Dp
阿新 • • 發佈:2018-11-09
正題
這題非常的水。
因為要求平方的期望,那麼我們先求不平方的期望。
用表示以第i個結尾的combo期望長度。
轉移非常顯然,如果是‘o',l[i]=l[i-1]+1;如果是'x',l[i]=0:如果是'?',l[i]=(l[i-1]+1)/2。
最後一個是因為有一半機率取o,有一半機率取x,所以加起來除以2.
平方的期望就更加明顯了。
設為前i個期望combo的平方。
非常自然,關鍵就在怎麼處理?
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; int n; char s[1000010]; double f[1000010]; double l[1000010]; int main(){ scanf("%d",&n); scanf("%s",s+1); f[0]=0;l[0]=0; for(int i=1;i<=n;i++){ if(s[i]=='o'){ f[i]=f[i-1]+2*l[i-1]+1; l[i]=l[i-1]+1; } else if(s[i]=='x'){ f[i]=f[i-1]; l[i]=0; } else{ f[i]=f[i-1]+(2*l[i-1]+1)/2; l[i]=(l[i-1]+1)/2; } } printf("%.4lf",f[n]); }