zoj 3640

一只吸血鬼,有n条路给他走,每次他随机走一条路,每条路有个限制,如果当时这个吸血鬼的攻击力f大于等于某个值c,那么就会花费t天逃出去,否则,花费1天的时间,并且攻击力增加c,问他逃出去的期望


int  c[108] , t[108] ;
double  dp[20008] ;
int  n ;

double  DP(int f){
        if(dp[f] > 0) return dp[f] ;
        for(int i = 1 ; i <= n ; i++){
              if(f > c[i]) dp[f] += t[i] ;
              else  dp[f] += (1.0 + DP(f + c[i]) ) ;
        }
        return dp[f] = dp[f] / n ;
}

int  main(){
     int  i , m ;
     double a = 0.5*(1+sqrt(5.0)) ;
     while(cin>>n>>m){
          for(i = 1 ; i <= n ; i++){
               scanf("%d" ,&c[i]) ;
               t[i] = int(a * c[i] * c[i]) ;
          }
          memset(dp , 0 , sizeof(dp)) ;
          printf("%.3lf\n" , DP(m)) ;
     }
     return 0 ;
}


你可能感兴趣的:(zoj 3640)