Help Me Escape

 题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808

 

题意:

师傅被妖怪抓走了。有n个妖怪,每个妖怪有一个固定的战斗力c[],师傅也有一个初始战斗力f0。
每天,师傅会随机选择一个妖怪决斗,如果打得赢ft>c[],就可以逃出去,逃出去要t[]天,毕竟超人不会飞;
否则,师傅会不甘心,当天他会拿出秘籍练功,将自己变强,f(t+1)=f(t)+c[],第二天寻找下一次机会。
问师傅能够逃脱可怕的妖怪,继续追求去印度吃手抓饼的梦想的天数的数学期望day。


解:
设dp[F]是战斗力为F时,逃离的天数期望。(答案是dp[f])。则有公式。

dp[F]= Σ 1/n * t[i]              ,F>c[[i]

           +∑ 1/n * dp[F+c[i]]   ,F<=c[i]

( 经典 题 好像)


#include<bits/stdc++.h>
using namespace std;
int n,m,i,sum,j,a[100000];
double t1,f[100000];
int main(){
    t1=(1+sqrt(5))*0.5;
    while(~scanf("%d%d",&n,&m)){
        sum=0;
        memset(f,0,sizeof(f));
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        sum=max(sum,a[i]);
    }
    for(i=sum*2;i>=m;i--){
        for(j=1;j<=n;j++){
            if(i>a[j])f[i]+=(int)(t1*a[j]*a[j]);
             else f[i]+=f[i+a[j]]+1;
        }
        f[i]/=n;///遇到妖怪的 概率 是 1 / n 
    }
    printf("%.3f\n",f[m]);}
}
View Code

 





posted on 2019-05-29 00:15  Willems  阅读(191)  评论(0编辑  收藏  举报

导航