題意:1*n的迷宮,剛開始在1的位置,你有一個骰(這個字居然念tou。。。漲知識了)子,你每次前進骰子的數。
每個位置還有金子的個數求到n時的金子的期望,走到迷宮外時重新骰。
dp【n】=a【i】,dp【i】=dp【i+1】/6+dp【i+2】/6+dp【i+3】/6+dp【i+4】/6+dp【i+5】/6+dp【i+6】/6+a【i】。
不足6的,到n-i停止。
#include<stdio.h>
#include<iostream>
using namespace std;
double a[106];
double dp[106];
int main()
{
int t;
cin>>t;int o=0;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
dp[i]=0;
}
dp[n]=a[n];
for(int i=n-1;i>=1;i--)
{
if(n-i>=6)
{
dp[i]=dp[i+1]/6+dp[i+2]/6+dp[i+3]/6+dp[i+4]/6+dp[i+5]/6+dp[i+6]/6+a[i];
}
else
{
for(int j=1;j<=n-i;j++)
dp[i]+=dp[i+j]/(n-i);
dp[i]+=a[i];
}
}
printf("Case %d: %.6lf\n",++o,dp[1]);
}
return 0;
}