题意: 一个吸血鬼,每次可以随机的选择n个洞中的任意一个,如果该吸血鬼的攻击值大于 该洞c[i]那么直接可以花费T[i]的时间久可以出去,不然要奋斗一天该吸血鬼攻击值在增加c[i] 随机选择n个洞口
dp【f】 表示攻击值为f期望出去的天数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int N=100005*2;
int n,f,c[105],T[105];
double F[N];
int main()
{
while(scanf("%d %d",&n,&f)==2)
{
int Max=f;
for(int i=1;i<=n;i++) scanf("%d",&c[i]),Max=max(Max,c[i]);
for (int i=1;i<=n;i++) T[i]=(int)((1+sqrt(5))*0.5*c[i]*c[i]+1e-8);
for(int i=2*Max;i>=f;i--)
{
F[i]=0;
for(int j=1;j<=n;j++)
if(i>c[j]) F[i]+=T[j];
else F[i]+=(F[i+c[j]]+1);
F[i]/=n;
}
printf("%.3lf\n",F[f]);
}
return 0;
}
本文解析了ZOJ3640题目“HelpMeEscape”,介绍了使用动态规划解决此问题的方法。通过定义dp[f]为攻击值为f时预期逃脱所需的天数,实现了有效的求解。
835

被折叠的 条评论
为什么被折叠?



