[BZOJ 4318]OSU!(期望dp)

Description

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

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

一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)

现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

Solution

和上一题差不多…双倍经验~

平方的期望并不等于期望的平方,所以还需要维护g2[i]为以i结尾的连续成功次数的平方的期望

只能用3*g2[i-1]+3*g[i-1]+1而不是(g[i-1]+1)3-g[i]3

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define MAXN 100005
using namespace std;
int n;
double p,f[MAXN],g[MAXN],g2[MAXN];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lf",&p);
        g[i]=(g[i-1]+1)*p;
        g2[i]=(g2[i-1]+2*g[i-1]+1)*p;
        f[i]=f[i-1]*(1-p);
        f[i]+=(f[i-1]+3*g2[i-1]+3*g[i-1]+1)*p;
    }
    printf("%.1lf\n",f[n]);
    return 0;
} 
时间: 2024-11-06 16:31:51

[BZOJ 4318]OSU!(期望dp)的相关文章

BZOJ 4318: OSU! 期望概率dp

这道15行的水题我竟然做了两节课...... 若是f[i][0]=(1-p)*f[i][0]+(1-p)*f[i][1],f[i][1]=p*(f[i-1][0]+1.0)+p*(f[i-1][1]+OOXX); 我们合并一下f[i]=p*1.0+p*OOXX=p*OX; OX:就是期望x^3的差,也就是(x+1)^3=x^3+3*x^2+3*x+1.0,中的3*x^2+3*x+1.0,这样我们要维护x^2以及x注意这里的x^2和x是指结尾的长度x #include<cstdio> doubl

●BZOJ 4318 OSU!

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4318题解: 期望dp 如果我们能够得到以每个位置结尾形成的连续1的长度的相关期望,那么问题就好解决了. 定义g[i]表示以1位置结尾的连续1的长度的期望. 转移显然:g[i]=p[i]*(g[i]+1) 然后定义h[i]表示以1位置结尾的连续1的长度的平方的期望 由于(x+1)^2=x^2+2x+1, 所以h[i]=p[i]*(h[i-1]+2*g[i-1]+1) 最后定义f[i]表示1-

BZOJ 4318: OSU! [DP 概率]

传送门 题意:变成了告诉每个操作的成功概率,并且得分是三次方 一样....分别维护$x,\ x^2,\ x^3$的期望就行了 注意$x^3$是我们最终求的得分,即使失败得分也要累加上之前的 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long l

BZOJ 4318: OSU!

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]之间

BZOJ 3270 博物馆 期望DP+高斯消元

题目大意:给定一张无向连通图,两个人初始各在某个点上,每个时刻每个人会不动或任选出边走,求两人最终期望在哪里相遇 把点数平方,原图上的两个点(x,y)变成新图上的一个点 然后令A为这个图的邻接矩阵(若两人在同一点上则没有出边,否则按概率转移),S为初始行向量(S[(a,b)]=1),ans为答案行向量 那么有ans=S+SA+SA^2+SA^3+... =S(I-A^+∞)/(I-A) =S/(I-A) 于是有ans*(I-A)=S 于是对I-A的转置求高斯消元即可. 和驱逐猪猡那题的思路很像.

BZOJ 2878([Noi2012]迷失游乐园-树形DP+环加外向树+期望DP+vector的erase)

2878: [Noi2012]迷失游乐园 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 319  Solved: 223 [Submit][Status] Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环(即m只可能等于n或者n-1).小Z现在所在的大门也正好是

【BZOJ】4318: OSU!

[算法]期望DP [题解] OSU!(误) 原本在纠结长度很不好算啊--x有好多种可能,新增一个不知道加多少QAQ 后来发现我们不是在算期望嘛--不是就算期望长度就好了嘛. f[i]为加入第i个后的收益. g[i]为加入第i个后的期望长度. 加入一个i=1的收益为x^3-(x-1)^3=3x^2-3x+1 注意不能直接g[i]*g[i]表示平方,因为平方不是线性运算,期望的平方≠平方的期望. g2[i]为期望长度的平方. 推导方式中(x-1)--->x和x--->(x+1)的区别: 我们设置g

[Codeforces Round #146 (Div. 1) B]Let&#39;s Play Osu!(期望Dp)

Description You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. For each click there are two outcomes: correct or bad. Let us denote correct as "O", bad as "X", then the whole play can be

Codeforces 235B Let&#39;s Play Osu! (概率dp求期望+公式变形)

B. Let's Play Osu! time limit per test:2 seconds memory limit per test:256 megabytes You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. For each click there are two outcomes: correct or bad. Let us deno