题意:
抛掷一个骰子,前进面朝上的点数,最后剩余不足六个的时候必须使得点数满足,不然重新抛掷,每个格子里都有黄金,问最后到达终点,获得黄金的期望、
思路:
像写概率dp那样,
n= min(6,n-i);
for(j:1~n)
p[ i+j ]+=(1/n)*p[i];
再每个黄金乘以自己的概率
#include<stdio.h>
#include<string.h>
double b[1000];
int main()
{
int t,n,a,p;
int k=1;
double ans=0;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=0;memset(b,0,sizeof(b));
b[1]=1.0;
for(int i=1;i<=n;i++){
scanf("%d",&a);
ans+=(a*b[i]);
if(i+6>n) p=n-i;
else p=6;
for(int j=1;j<=p;j++)
b[i+j]+=b[i]*(1.0/(p*1.0));
}
printf("Case %d: %.6lf\n",k++,ans);
}
return 0;
}