您的位置:首页 > 其它

Help Me Escape ZOJ - 3640

2017-09-15 15:28 399 查看
题意:

cain在山洞里,自身有战力 f,有n条路可以粗去,随机选一条路走,

路的难度为 c[i],如果c[i]>=f,一天后cain回到山洞,战力变为c[i]+f

否则经过v[i]天,cain可以通过这条路离开,问cain离开洞穴需要天数的期望

思路:

dp[i]存战斗力为i时离开的数学期望

遍历每条路,如果f>e[i],dp[f]+=(1/n)*v[i[;

不然递归解决求出dp[ f+e[i] ] , dp[f]+=(1/n)*(dfs(f+e[i])+1);

#include<bits/stdc++.h>
using namespace std;
const double P=(1.0+sqrt(5.0))/2.0;
int c[1009],v[1009];
double dp[20009];
int n,ff;
double dfs(int f)
{
// printf("%d\n",f);
if(dp[f]>0) return dp[f];
for(int i=1;i<=n;i++)
{
if(f<=c[i]) dp[f]+=(1.0+dfs(f+c[i]));
else dp[f]+=(1.0*v[i]);
}
dp[f]/=(1.0*n);
// printf("%d %.3f\n",f,dp[f]);
return dp[f];
}
int main()
{

while(~scanf("%d%d",&n,&ff))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&c[i]);
v[i]=(int)(c[i]*c[i]*P);
}
memset(dp,0,sizeof(dp));
printf("%.3lf\n",dfs(ff));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: