【ZOJ】3640 Help Me Escape

本文探讨了一个吸血鬼逃逸问题,通过动态规划的方法来求解逃出的期望天数。具体而言,一个吸血鬼初始攻击力为f,面对n条路的选择,每条路有不同的条件与代价。

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808

题意:一个吸血鬼初始攻击力为f。n条路,他每次等概率选择一条路。如果攻击力大于这条路的c[i],则花费t[i]天逃出($t[i]=\frac{1+\sqrt{5}}{2} \times c[i]^2$),否则花费1天的时间继续选择路。问逃出去的期望天数(1<=c[i], f<=10000)

#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int N=20005;
double f[N];
int n, c[N], t[N];
double E(int x) {
	if(f[x]>0) return f[x];
	double &now=f[x];
	for(int i=0; i<n; ++i) {
		if(x>c[i]) now+=t[i];
		else now+=E(x+c[i])+1;
	}
	now/=n;
	return now;
}
int main() {
	int now;
	while(~scanf("%d%d", &n, &now)) {
		for(int i=0; i<n; ++i) scanf("%d", &c[i]), t[i]=(1.0+sqrt(5))/2*c[i]*c[i];
		printf("%.3f\n", E(now));
		memset(f, 0, sizeof f);
	}
	return 0;
}

  

简单题无脑dp= =

设$f[i]$表示攻击力为$i$时逃出去所需要的期望天数..随便搞一下就行了..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值