码迷,mamicode.com
首页 > 其他好文 > 详细

【期望DP】 ZOJ 3640 Help Me Escape

时间:2015-08-12 21:27:55      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

通道

题意:吸血鬼在一个洞穴遍地的地方,他拥有初始战斗力,如果战斗力大于了洞穴的c值他就能花时间逃出去,否则他的战斗力增加c,然后随机选择下一个要去的洞穴,问他出去所花时间的期望

思路:设dp[v] ,表示当能力值为v的时的期望。所以方程很容易写了,dp[v] = sum{ ti/n }(v直接逃出去) + sum { (1 + dp[v + c[i]])/n }(下一次逃出去) ;对于路i,如果v大于路i的限制,那么就能够用ti逃出去,概率为{1/n}否则只能进入下一天的尝试,所以需要用的时间为dp[v + c[i]] + 1 ,概率为{1/n}; 

代码:

技术分享
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
using namespace std;

#define N 20005
double  dp[N],t;
int c[105],n,f;

double dfs(int v)
{
    int i,j;
    if(dp[v]>0) return  dp[v];
    for(i=0;i<n;i++)
    {
       if(v>c[i])
       {
           dp[v]=dp[v]+int(t*c[i]*c[i])*1.0/n;
       }
       else
       {
          dp[v]=dp[v]+(1+dfs(v+c[i]))*1.0/n;
       }

    }
    return dp[v];
}
int main()
{
    int i,j;
    t=(1.0+sqrt(5.0))/2.0;
    while(~scanf("%d%d",&n,&f))
    {
        memset(dp,0,sizeof(dp));
        for(i=0;i<n;i++)
          scanf("%d",&c[i]);
       printf("%.3lf\n",dfs(f));
    }
    return 0;
}
View Code

 

【期望DP】 ZOJ 3640 Help Me Escape

标签:

原文地址:http://www.cnblogs.com/Rojo/p/4725531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!