CF235 Let'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×出现概率

求和即是期望得分

对于某一个点i

有(1,i) (2,i) (3,i) (4,i)...(i-1,i)这些对O,每个概率即是从左到右连乘,比如

令这些概率和为dp[i],即

这样我们有递推关系

对i+1点来说,

dp求和即是所有对O出现的概率之和×2

+

单个O出现的概率×1

求得的即是期望分数

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int NN=111111;
double f[NN];
double dp[NN];
int main(){
#ifndef ONLINE_JUDGE
	freopen("/home/rainto96/in.txt","r",stdin);
#endif

	int n;scanf("%d",&n);
	double sum=0;
	for(int i=1;i<=n;i++){
		//cin>>f[i];
		scanf("%lf",&f[i]);
		sum+=f[i];
	}
	double ansum=0;
	for(int i=2;i<=n;i++){
		dp[i]=(dp[i-1]+f[i-1])*f[i];
		ansum+=dp[i];
	}
	printf("%f\n",ansum*2.0+sum);
}

CF235 Let's Play Osu![dp+概率]

时间: 2024-12-07 08:41:58

CF235 Let's Play Osu![dp+概率]的相关文章

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

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=

【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

这道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 1415: [Noi2005]聪聪和可可 [DP 概率]

传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走很像,只不过这道题限制了一个人走的方向,两人间的距离具有了阶段性!可以直接$DP$ 求期望一般倒推 $f[i][j]$表示聪在$i$可在$j$抓住的期望时间 $bfs$预处理$g[i][j]$表示聪在$i$可在$j$下一步聪走到哪里 这样聪的行动就知道了,转移枚举可的行动就行啦 边界:$f[i][i

hdu-5816 Hearthstone(状压dp+概率期望)

题目链接: Hearthstone Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description Hearthstone is an online collectible card game from Blizzard Entertainment. Strategies and luck are the most important factors

UVA - 1498 Activation (DP+概率)

Description After 4 years' waiting, the game "Chinese Paladin 5" finally comes out. Tomato is a crazy fan, and luckily he got the first release. Now he is at home, ready to begin his journey. But before starting the game, he must first activate

UVA 1541 - To Bet or Not To Bet 记忆化DP概率

Alexander Charles McMillan loves to gamble, and during his last trip to the casino he ran across a new game. It is played on a linear sequence of squares as shown below. A chip is initially placed on the Start square. The player then tries to move th

Codeforces 482C Game with Strings(dp+概率)

题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,现在从中选定一个字符串为答案串,你不知道答案串是哪个,但是可以通过询问来确定, 每次询问一个位置上字符为多少.现在你询问的每个位置的概率是相同的,(问过的位置不会再问),求询问次数的期 望. 解题思路:因为字符串长度不会大于20,所以用二进制表示询问了哪些位置,C[s]即为询问s的位置可以确定多少个字 符串.这步不能通过枚举s,然后判断处理,复杂度为o(2^20 * 20 * 50),太高.可