首页 > 其他 > 详细

期望dp——zoj3640

时间:2019-06-17 23:53:21      阅读:186      评论:0      收藏:0      [点我收藏+]
/*
dp[i]表示力量为i时的期望
dp[i]=sum{tj}/n+sum{dp[i+cj]+1}/n //前一项是cj<i的和,后一项是cj>=i的和 
初始状态dp[m]
*/
#include<bits/stdc++.h>
using namespace std;

const double C = ((double)1+sqrt(5))/2;
const double esp = 1e-8;
const int maxn = 3e4+5;

int n,f,c[maxn],Max;
double dp[maxn];

int main(){
    while(scanf("%d%d",&n,&f)!=EOF){
        Max=f;
        memset(dp,0,sizeof dp);
         
        for(int i=1;i<=n;i++)scanf("%d",&c[i]),Max=max(Max,c[i]);
        for(int i=1;i<=n;i++)
            dp[Max+1]+=(double)((int)(C*c[i]*c[i]))/n;
        for(int i=Max+2;i<=2*Max;i++)dp[i]=dp[Max+1];
        
        for(int i=Max;i>=f;i--){
            for(int j=1;j<=n;j++)
                if(i>c[j])//直接可以走出去 
                    dp[i]+=(double)((int)(C*c[j]*c[j]))/n;
                else 
                    dp[i]+=(dp[i+c[j]]+1)/n;
        }
        
        printf("%.3lf\n",dp[f]);
    }
} 

 

期望dp——zoj3640

原文:https://www.cnblogs.com/zsben991126/p/11042811.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!