ZOJ-3640-Help Me Escape
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3640
一只吸血鬼,有n条路给他走,每次他随机走一条路,每条路有个限制,如果当时这个吸血鬼的攻击力大于等于某个值,那么就会花费t天逃出去,否则,花费1天的时间,并且攻击力增加,问他逃出去的期望
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int c[105];
int t[105];
int v[20010];
double f[20010];
int n;
double sol(int at)
{
int i;
if(v[at])
return f[at];
v[at]=1;
f[at]=0;
for(i=1;i<=n;i++)
if(at>c[i])
f[at]+=t[i];
else
f[at]+=sol(at+c[i])+1;
f[at]/=n;
return f[at];
}
int main()
{
int i,ff;
while(scanf("%d%d",&n,&ff)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&c[i]);
for(i=1;i<=n;i++)
t[i]=(int)((1+sqrt(5.0))*0.5*c[i]*c[i]);
memset(v,0,sizeof(v));
printf("%.3lf\n",sol(ff));
}
return 0;
}