Luogu 1654 / bzoj 4318 OSU!(期望dp)

传送门

题意:给出长度为n待填的01串,第i位填1概率为p[i],整个串中每一段极长的,连续为1长度为m的串对答案有m^{3}的贡献(极长表示如果"1111"贡献了64,那么它的子串将不再贡献,比如"11"不再做出8的贡献),求答案的期望

题解:

定义:f[i]表示第i位的连续为1后缀的长度的期望,h[i]表示第i位的连续为1的长度平方的期望(平方的期望不一定等于期望的平方,所以不能直接用f[i]平方来搞)。

每一位填0/1都是独立的(互不影响),假设第i-1位的连续为1后缀长度为x,考虑第i位,如果填0那么显然这一位对答案没有贡献,如果填1(如果填0那么贡献为0直接不管),那么这一位(注意只看这一位)对答案的贡献为(x+1)^{3}-x^{3}=3x^{2}+3x+1。根据定义,x的值应该为f[i-1],x^2的值应该为g[i-1]。所以这一位的贡献为3g[i-1]+3f[i-1]+1

现在再考虑如何求 fg 这两个数组。

 f 比较容易得到:f[i]=p[i]*(f[i-1]+1)

现在考虑 g:第i-1位的连续为1的长度平方的期望为g[i-1],第i-1位的连续为1的长度的期望为f[i-1],假设第i-1位的连续为1后缀长度为x,考虑第i位(如果填0那么贡献为0直接不管),如果填1那么这一位连续为1后缀的长度平方为(x+1)^2=x^2+2x+1。根据定义,x的值应该为f[i-1],x^2的值应该为g[i-1]。所以,g[i]=p[i]*(g[i-1]+2f[i-1]+1)

之前做BZOJ时乱写的辣鸡题解,成功地骗过了当时的自己......

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+4;
int n;
double pr[N];
double f[N],g[N];
double ans;
int main() {
	scanf("%d",&n);
	for (register int i=1;i<=n;++i)
		scanf("%lf",&pr[i]);
	for (register int i=1;i<=n;++i) {
		f[i]=pr[i]*(f[i-1]+1);
		g[i]=pr[i]*(g[i-1]+2*f[i-1]+1);
		ans+=pr[i]*(3*g[i-1]+3*f[i-1]+1);
	}
	printf("%.1lf\n",ans);
	return 0;
}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值