题目
有nnn次点击要做,成功了就是ooo,失败了就是xxx,分数是按combocombocombo计算的,连续aaa个combocombocombo就有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[n−1],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[n−1]+2×g[n−1]+1,g[n]=g[n−1]+1(也就是说,用之前的combo,按完全平方公式拆开,加上的就是2倍长度+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]=?,其实和o很类似,但是f[n]=f[n−1]+g[n−1]+0.5(后面两项有一半的概率),g[n]=(g[n−1]+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]);
}
游戏得分期望算法解析
本文深入探讨了一种计算游戏得分期望的算法,特别是在存在不确定性因素的情况下。通过定义状态转移方程,文章详细解释了如何计算连续成功操作的得分期望值,并提供了一段C++代码实现。适用于对算法和游戏开发感兴趣的读者。
1997

被折叠的 条评论
为什么被折叠?



