bzoj 4318: OSU!【期望dp】

思路有点眼熟啊,就是设l1记录长为x的极长全1串贡献x的答案,l2记录长为x的极长全1串贡献x^2的答案,f记录真正的答案
转移的话根据n-(n-1)=1,n2-(n-1)2=2n-1,n3-(n-1)3=3n^2-3n+1直接转移即可

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int n;
double a,l1[N],l2[N],f[N];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lf",&a);
        l1[i]=(l1[i-1]+1)*a;
        l2[i]=(l2[i-1]+2*l1[i-1]+1)*a;
        f[i]=f[i-1]+(3*l2[i-1]+3*l1[i-1]+1)*a;
    }
    printf("%.1f",f[n]);
    return 0;
}
posted @ 2018-09-14 15:11  lokiii  阅读(93)  评论(0编辑  收藏  举报