zoukankan      html  css  js  c++  java
  • BZOJ 4318: OSU! 期望DP

    4318: OSU!

    题目连接:

    http://www.lydsy.com/JudgeOnline/problem.php?id=4318

    Description

    osu 是一款群众喜闻乐见的休闲软件。

    我们可以把osu的规则简化与改编成以下的样子:

    一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)
    现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

    Input

    第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。

    Output

    只有一个实数,表示答案。答案四舍五入后保留1位小数。

    Sample Input

    3

    0.5

    0.5

    0.5

    Sample Output

    6.0

    Hint

    【样例说明】

    000分数为0,001分数为1,010分数为1,100分数为1,101分数为2,110分数为8,011分数为8,111分数为27,总和为48,期望为48/8=6.0

    N<=100000

    题意

    题解:

    如果这个位置是0,那么贡献为0,如果这个位置是1,那么贡献为(x+1)^3-x^3=3x^2+3x+1,x为当前1长度的期望

    然后扫一遍就好了,维护一个x的期望,和x^2的期望

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    double dp[100005][3];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            double x;scanf("%lf",&x);
            dp[i][0]=(dp[i-1][0]+1)*x;
            dp[i][1]=(dp[i-1][1]+2*dp[i-1][0]+1)*x;
            dp[i][2]=dp[i-1][2]+(3*dp[i-1][1]+3*dp[i-1][0]+1)*x;
        }
        printf("%.1f
    ",dp[n][2]);
    }
  • 相关阅读:
    JS 异步编程
    JS XMLHttpRequest
    JS 日期
    JS DOM
    JS 异常处理
    JS BOM
    JS 正则表达式
    JS 面向对象
    (22)python PhantomJS
    HDU1698 线段树(区间更新区间查询)
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5068546.html
Copyright © 2011-2022 走看看