Lightoj 1030(求期望)
阿新 • • 發佈:2019-02-12
題意:給一個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; }