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 long ll;
const int N=1e5+5;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}
int n;
double a,f[N][3];
int main(){
    freopen("in","r",stdin);
    n=read();
    for(int i=1;i<=n;i++){
        scanf("%lf",&a);
        f[i][0]=(f[i-1][0]+1)*a;
        f[i][1]=(f[i-1][1]+2*f[i-1][0]+1)*a;
        f[i][2]=f[i-1][2]+(3*f[i-1][1]+3*f[i-1][0]+1)*a;
    }
    printf("%.1lf",f[n][2]);
}
时间: 2024-10-22 21:53:57

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

CF235 Let&#39;s Play Osu![dp+概率]

题意: 给n个位置,给出1-n上每个位置出现O的概率pi,记分规则如下,连续的x个O记为x^2分,求和,如 XXOOOXOXOOXX得分为 求得分的期望 思考一下,我们能比较容易地得出O(n^2)的方法 令dp[i]为前i的得分期望 那么 显然这题 考虑一下变换记分的方式 我们有 那么记分方式就变为 一段连续的O,有多少对O×2+O的个数 一对O可以贡献2分 现在得分来源变为两个地方 一对O(2分),和单个O(1分) 我们知道 期望=概率×收益 我们找到每个对O的概率×2 再找到单个O×出现概率

[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 和上一题差不多…双倍经验~ 平方的期望并不等于期望的平方,所以还

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 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-

UVA 11427 Expect the Expected(DP+概率)

链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35396 [思路] DP+概率 见白书. [代码] 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 const int N = 100+10; 6 7 int n,a,b; 8 double f[N][N]; 9 10 int main() { 11 int T,kase=

【BZOJ】3566: [SHOI2014]概率充电器

[算法]树型DP+期望DP [题意]一棵树上每个点均有直接充电概率qi%,每条边有导电概率pi%,问期望有多少结点处于充电状态? [题解]引用自:[BZOJ3566][SHOI2014]概率充电器 树形DP 概率DP by 空灰冰魂 最大的难点在于计算每个点充电期望时,两个节点各自的期望都会影响对方的期望. 所以考虑转化对象,改为求每个节点充不上电的期望,充不上电就不用考虑两者的相互影响. fi表示结点i由子结点和自身充不上电的概率 gi表示结点i由父结点充不上电的概率 第一次DFS: hi表示

【dp概率与期望】pattern

这是一个比赛题 营销策略 (pattern.cpp/c/pas) [题目描述] W 记的儿童套餐会赠送一份小玩具,赠送的小玩具共有n 种.小朋友买了m 份儿童套餐,求收集齐n 种小玩具的概率.假设每份儿童套餐赠送的小玩具的种类是等概率随机的. [输入格式] 从pattern.in 中输入数据一行,两个整数n,m. [输出格式] 输出到pattern.out 中一个实数表示收集齐小玩具的概率,保留4 位小数. [样例输入] 2 3 [样例输出] 0.7500 [数据规模与约定] 对于10% 的数据

【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