#期望dp#洛谷 1365 bzoj 3450 Easy

本文深入探讨了一种计算游戏得分期望的算法,特别是在存在不确定性因素的情况下。通过定义状态转移方程,文章详细解释了如何计算连续成功操作的得分期望值,并提供了一段C++代码实现。适用于对算法和游戏开发感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

nnn次点击要做,成功了就是ooo,失败了就是xxx,分数是按combocombocombo计算的,连续aaacombocombocombo就有a×aa\times aa×a分,combocombocombo就是极大的连续ooo。有些地方ooo或者xxx各有12\frac{1}{2}21的可能性,用???号来表示。期望得分是多少


分析

那么首先设f[n]f[n]f[n]表示到nnn的总期望combocombocombo,g[n]g[n]g[n]表示到nnn的连续一段ooo的总长度,
那么就可以得到

  • s[n]=x,f[n]=f[n−1],g[n]=0s[n]=x,f[n]=f[n-1],g[n]=0s[n]=x,f[n]=f[n1],g[n]=0
  • s[n]=o,f[n]=f[n−1]+2×g[n−1]+1,g[n]=g[n−1]+1(也就是说,用之前的combo,按完全平方公式拆开,加上的就是2倍长度+1,同时期望长度也要增加一)s[n]=o,f[n]=f[n-1]+2\times g[n-1]+1,g[n]=g[n-1]+1(也就是说,用之前的combo,按完全平方公式拆开,加上的就是2倍长度+1,同时期望长度也要增加一)s[n]=o,f[n]=f[n1]+2×g[n1]+1,g[n]=g[n1]+1(combo2+1)
  • s[n]=?,其实和o很类似,但是f[n]=f[n−1]+g[n−1]+0.5(后面两项有一半的概率),g[n]=(g[n−1]+1)÷2s[n]=?,其实和o很类似,但是f[n]=f[n-1]+g[n-1]+0.5(后面两项有一半的概率),g[n]=(g[n-1]+1)\div 2s[n]=?,of[n]=f[n1]+g[n1]+0.5()g[n]=(g[n1]+1)÷2

代码

#include <cstdio>
#define rr register
using namespace std;
int n,p; double f[2],g[2];
signed main(){
	for (scanf("%d",&n);n;--n){
		rr char c=getchar(); p^=1;
		while (c!='o'&&c!='x'&&c!='?') c=getchar();
		if (c=='x') f[p]=f[p^1],g[p]=0;
		else if (c=='o') f[p]=f[p^1]+2*g[p^1]+1,g[p]=g[p^1]+1;
		else f[p]=f[p^1]+g[p^1]+0.5,g[p]=(g[p^1]+1)*0.5;
	}
	return !printf("%.4lf",f[p]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值