N个的格子,每个格子都有黄金权值,淘金者站在第一个位置(当然黄金归它了,概率为1),通过掷骰子得到一个X值,淘金者的位置就会从p变到p+X,然后收走里面的黄金,当位置p+X>N时不作数再掷骰子直到不超过N,到达N位置时淘金结束,求掏得得黄金数期望。
每个位置都会影响接下来不超过6个位置的概率(前提长度大于6),即每个位置的期望都是由前面不超过六个位置的期望构成的。
位置:1 2 3 .……n ,设第i个位置被选中的概率为p[i],
……
。
对于
的取值,当
,表示后面长度大于6,则后六个被选择的几率都是六分之一,所以K=6,否则几率就是长度的倒数,即K=n-j。
最后期望就是。
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int a[105];
double p[105];
int n;
int cal_k(int x){
int k;
if((n-x)>=6)
k=6;
else k=n-x;
return k;
}
int main(){
int T,t=1;scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(p,0,sizeof(p));
p[1]=1.0;
for(int i=2;i<=n;i++){
for(int j=i-1,cnt=0;j>0&&cnt<6;j--,cnt++){
// printf("j=%d,k==%d\n",j,cal_k(j));
p[i]+=p[j]*1.0/cal_k(j);
}
}
// for(int i=1;i<=n;i++)
// printf("%lf ",p[i]);
printf("Case %d: ",t++);
double sum=0.0;
for(int i=1;i<=n;i++)
sum+=p[i]*a[i];
printf("%lf\n",sum);
}
return 0;
}