1. 程式人生 > >Lightoj 1030(求期望)

Lightoj 1030(求期望)

題意:給一個1×n的格子,每個格子都有一定的黃金,起點在1,終點在n,通過投擲骰子前進,如果會超過n就重新投,每到一個格子就獲得其中的黃金,問到達n能得到的黃金數目的期望。

程式碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[105];
double dp[105];
int main(){
    int t,n,i,j,cas,tmp;
    scanf("%d",&t);
    for(cas=1;cas<=t;cas++){                    //dp[i]為i點到n點的期望
        scanf("%d",&n);
        for(i=0;i<=n;i++)
        dp[i]=0;
        for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
        dp[n]=a[n];
        for(i=n-1;i>=1;i--){
            tmp=min(6,n-i);                     //不夠的時候特殊判斷
            dp[i]=a[i];
            for(j=1;j<=tmp;j++)
            dp[i]+=(dp[i+j]/tmp);
        }
        printf("Case %d: %.7lf\n",cas,dp[1]);
    }
    return 0;
}