您的位置:首页 > 其它

ZOJ 3640 Help Me Escape

2013-10-08 12:55 337 查看
题目大意:一个魔鬼被上帝关在一个洞穴里,洞穴有n条路可以出去,第i条路的困难程度为ci。魔鬼若想从第i条路走出去的条件是魔鬼当前的战斗力f大于等于ci ,且魔鬼用ti天走出去的,ti = (1+ sqrt(5))/ 2 * c[i] * c[i]。如果f < ci,则他需要花费一天的时间增加战斗力,此时f = f + c[i]。求魔鬼走出洞穴所用天数的期望。

解题思路:简单的概率dp,用记忆化搜索实现。按照题目的意思实现就可以了,比较容易理解~~

代码实现:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

#define N 110
#define M 1100000
int c
;
double dp[M];
int n;

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